一、 安全管理概述
安全管理涉及用户与用户组、安全设置、点组态(基本页、报警页)、配方组态、窗口属性、动画链接中的“安全限制”、数据源中的变量属性、数据源高级选项中登录账户等内容以及用户管理、权限判断相关函数。
1)图元级安全:通过动画链接中的“访问限制”。
2)画面安全:画面属性中的安全设置。
3)点的安全:点的读、写、报警确认的安全属性在点组态中设置。对数据库变量写操作的进一步限制在数据库变量(在数据源中的变量)中设置。
4)配方安全:配方的使用与配方维护,在配方组态界面配置。
5)用户也可以通过脚本实现特殊的安全限制。
上述安全设置只有在“安全设置配置”中启动了安全管理,且启动了VIEW或Web客户端的读写限制才起作用。外部程序访问的限制则需要只要在“安全设置配置”中勾选相应的限制才起作用。外部程序受点的安全属性限制,与图元、画面、配方等设置项无关。

二、用户与用户组以及保护对象
用户:用户有账户名、姓名、级别、超时时间(登录超过一定时间则自动退出)、操作、审核权限、管理员账户、密码永不过期、下次登录需修改密码、账户已禁用等属性。

密码强度:密码强度在安全设置中指定,强度分为低、中、高三级。低级只要求密码不为空即可。中级要求密码不少于6个字符,且由字母、数字、特殊字符(除了字母、数字以外的字符)中的两种组合而成,而高级比中级更加强一步,需由三种组合而成。
密码时限:密码设置为永不过期的表示没有时限,否则为有时限,默认时限为42天,该参数可在安全设置中更改。

下次登录需修改密码:若该属性被设置,则账户登录时会提示修改密码,当用户修改了密码后则不再提示。
账户已禁用:若该属性被设置则账户处于禁用状态,即不能再登录该账户,直到解禁。
用户锁定:在安全设置中指定,密码重试次数超过指定的次数则账户被锁定,只有超过指定间隔才能再次尝试登录。
用户组:是用户的集合,用户组为一组用户的代表。

安全区:是用户组的集合,代表一组用户组。
登录服务器:登录服务器是指用于整个系统用户验证的服务器。若不指定登录服务器(适合于单机版)则每个进程(如DB、VIEW等)使用自身的用户信息。在安全设置中指定登录服务器。指定登录服务器后,系统中每个进程都使用相同的用户与用户组信息。当信息(包括用户和用户组)改变时每个进程会自动进行用户信息同步。在分布式配置中必须指定统一的登录服务器以保证用户信息一致。
审核记录服务器:该服务器保存所有的操作记录,包括所有客户端的操作信息。所有记录内容以系统特有的加密形式记录,系统没提供任何更改记录的手段,从而保证记录的真实性。记录内容只能通过系统提供的专有工具AuditView程序查看。信息不但记录在审核记录服务器上,每个客户端也同时保存了记录,以避免单点故障引发记录丢失。本地保存的信息通过LogView查看。
保护对象:安全管理保护的主要对象是数据,即对数据读写的操作。另外还包括配方和窗口的保护,配方内容的保密和对配方修改的限制以及窗口的访问限制。对象隶属于某个安全区,只有安全区内的用户才能访问该对象。管理员账户则不受此限制。
用户、用户组、保护对象之间关系:图中仅以点作为被保护对象的代表。

图中有三个用户,group1包括user1,user2。group2包括user2,user3。
用户user2属于group1、group2两个用户组。
位号TAG1只属于group1,所以只能被用户user1、user2访问。
位号TAG2即属于group1、又属于group2,所以能被用户user1、user2、user3访问。
位号TAG3即属于group2,所以能被用户user2、user3访问。
三、对象安全设置
1、点的安全区属性
点的安全属性包括读、写访问限制,具有报警功能的点还具有报警确认操作限制。

点的安全设置:点的安全设置包括读、写两个安全区的设置,即点的读、写保护可以分别指定。
报警确认安全设置:可对报警确认进行限制,只有属于该点可写用户组的用户才可进行确认操作。限制分为:1、无限制。2、操作权。3、操作权+审核权。

点的外部访问限制:点的安全区除了对客户端访问限制外,还能限制外部程序的访问,如通过OPC服务,Modbus服务CommServer(TCP协议),API接口,WebService等的访问。是否限制也可以在安全设置中指定,如下图红色框所示。

点的安全参数:
点的安全区属性为参数SecuRead与SecuWrite。分别对应:读安全区与写安全区。
可以在脚本中通过函数
IsUserPermission(UserName,Tag.SecuWrite)先用CheckUser验证用户)或IsSetPermission(Operater,Verifier,VarName)来判断指定的用户是否拥有操作权限。
在脚本中可以主动调用SetDataWithVerifyDlg安全审核框来限制对变量赋值。
2、VIEW与Web客户端访问限制
启用VIEW与Web客户端的访问限制,不但要启用安全管理,还需要在安全设置中启用VIEW访问限制或WEB访问限制。默认不对自身客户端限制。如下图所示:

VIEW与Web客户端访问限制可分别指定。并可指定只限制写、还是读写都限制。默认只对Web客户端的写进行限制。
3、数据库变量安全设置
数据库变量位于数据源下,如下图所示。对数据库变量可以指定启用操作审核。指定了审核的变量在操作时需要操作员与审核员双重认证。

数据源中的账户:数据源账户用于指定与数据库通信的默认账户。在未登录时使用该账户,登录后则切换到所登录的账户。

与点的安全区属性类似,配方分为使用配方与维护(增、删、改)配方两方面的保护,使用与维护配方可单独指定安全区,并可在操作权限中指定是否需要审核者确认。配方只有在人为操作时受限,在自动执行脚本中不受限制。

画面安全区用于限制对窗口的访问,只允许安全区内的用户打开。
窗口访问限制:无论哪种方式打开都受限。

在动画连接的“访问限制”可以指定图元所属安全区。可指定对非安全区的限制是隐藏还是禁止操作。

四、安全管理相关属性函数
系统提供了很多安全管理相关的函数、属性和窗口。用于用户登录、注销,动态增、删、改用户与用户组。
属性 | 1 | UserName | 当前用户名 |
2 | UserLevel | 当前用户级别 | |
3 | UserGroup | 当前登录账户所属用户组 | |
相关系统窗口 (系统窗口位于安装目录下子目录SysWin下) | 4 | sysoperateack | 变量操作审核窗口 |
5 | sysrecipeack | 配方操作审核窗口 | |
6 | sysalmack | 报警确认审核窗口 | |
函数 | 7 | Int Login(String Name, String Pass) | 用户登录 |
8 | Void Logout() | 注销当前用户 | |
9 | Void LoginDlg() | 调用用户登录对话框 | |
10 | Bool CheckUser(String Name, String Pass) | 验证用户,用于判断输入的用户名与密码是否正确 | |
11 | Bool SetDataWithVerifyDlg(String VarName, void Value) | 下置数据带有操作审核 | |
12 | String GetAuditDataSource() | 得到安全审核数据源名 | |
13 | Bool GetAuditDsDescAndTable(String &ConnectDesc, String &TableName) | 得到安全审核数据连接描述和表名 | |
14 | Bool AddUser(String Name, String TrueName, String Pass, Int Level, Bool OperRight, Bool VerifyRight, Int TimeoutLimit) | 增加新用户 | |
15 | Bool RemoveUser(String Name) | 删除用户 | |
16 | String GetUserTrueName(String Name) | 得到用户真实姓名 | |
17 | Int GetUserLevel(String Name) | 得到用户级别 | |
18 | Bool IsUserOperate(String Name) | 用户是否拥有操作者权限 | |
19 | Bool IsUserVerify(String Name) | 用户是否拥有审核者权限 | |
20 | Int GetUserTimeoutLimit(String Name) | 得到用户操作时限 | |
21 | Bool SetUserLevel(String Name, Int Level) | 设置用户级别 | |
22 | Bool SetUserOperate(String Name, Int Flag) | 设置操作者权限 | |
23 | Bool SetUserVerify(String Name, Int Flag) | 设置审核者权限 | |
24 | Bool SetUserTimeoutLimit(String Name, Int Limit) | 设置用户操作时限 | |
25 | String Array GetUserBelongGroups(String Name) | 得到用户隶属的用户组 | |
26 | String Array GetUserNames() | 得到用户名称列表 | |
27 | Bool AddGroup(String Name, String Comment, String Array Users) | 增加用户组 | |
28 | Bool RemoveGroup(String Name) | 删除用户组 | |
29 | String GetGroupComment(String Name) | 得到用户组说明 | |
30 | Bool SetGroupComment(String Name, String Comment) | 设置用户组说明 | |
31 | Bool AddUserToGroup(String Name, String User) | 用户组增加用户 | |
32 | Bool RemoveUserFromGroup(String Name, String User) | 用户组移除用户 | |
33 | String Array GetGroupNames() | 得到组名称列表 | |
34 | Bool ChangeUserPass(String Name, String Pass) | 改变用户口令 | |
35 | String Array GetGroupUsers(String Name) | 得到组中用户列表 | |
36 | Bool IsUserPermission(String User, Int Secu) | 用户是否属于SECU所规定的用户组 | |
37 | Bool IsUserAdmin(String Name) | 是否为管理员账户 | |
38 | Bool SetUserDisable(String Name, Bool Disable) | 禁止账户 | |
39 | Bool IsUserDisable(String Name) | 账户是否被禁止 | |
40 | Bool IsUserPassTimeout(String Name) | 账户密码是否过期 | |
41 | Bool SetUserChangePassFirst(String Name, Bool Change) | 设置账户登录需改密码 | |
42 | Bool IsUserChangePassFirst(String Name) | 账户登录是否需要修改密码 | |
43 | Bool SetUserPassNoLimit(String Name, Bool NoLimit) | 账户密码永不过期 | |
44 | Bool IsUserPassNoLimit(String Name) | 账户密码是否永不过期 | |
45 | Int CalcPassLevel(String Pass) | 计算给定字符串的密码强度 | |
46 | Bool IsSetPermission(String Operator, String Checker, String VarName) | 是否允许指定用户操作,用户包括操作者与审核者 |





