在Domino中,数据库的存取控制列表是Domino安全性的重要组成部分,也是决定每个用户能否访问数据库的主要设置。
每个数据库都有自己的存取控制列表(Access Control List, 以下简称ACL)。
打开一个数据库,选择菜单“文件”-“数据库”-“存取控制”,就可以看到该数据库的ACL。
ACL分为四个页面:基本、角色、日志和高级。
以下分别说明这四个页面中的内容。
并说明了ACL 中可以接受的名称格式。
ACL的“基本”页面ACL的核心功能都包含在“基本”页面中。
在“个人/服务器/工作组”中选择“全部显示”,所有存取级别的用户都会被列出。
也可以选择仅查看“管理者”、“设计者”等某个存取级别的用户。
当选中某个用户名时,对话框中会显示他的用户类型和存取级别,以及与此存取级别相应的一些扩展和限制选项。
用户类型和存取级别指定了用户对此数据库的最大权限。
数据库的管理员可以增加、删除或修改用户的权限。
点击看大图返回七个存取级别ACL中共有七个存取级别:管理者、设计者、编辑者、作者、读者、存放者和不能存取者。
了解这些级别的含义是了解ACL工作机制的基础。
下图显示了每个存取级别的缺省权限,从不能存取者开始,每个级别都比下一级拥有更多的权限,直到拥有所有权限的管理者。
(每个级别的权限都包含其下所有级别的权限)。
不能存取者此级别表示用户没有任何权限,不能存取数据库。
管理员可以开放给不能存取者的权限只有“读取公用文档”和“写公用文档”。
关于公用文档的概念,见下面的“读写公用文档”部分。
存放者和读者存放者只能向数据库中放入文档,但不能读取这些文档。
读者则只能读文档,但不能向数据库中放入文档。
二者都只具有单一的功能。
(读者拥有一个额外的权限,可以执行代理)。
作者作者可以创建、修改、删除文档。
但是,要想使拥有作者权限的用户能够修改、删除文档,还需要作进一步的设置:要创建文档,需要选中“创建文档”选项。
要修改文档,需要设置文档中的作者域。
要删除文档,需要选中“删除文档”选项,同时需要设置文档中的作者域。
在设计数据库时,有一类特殊的域称为作者域,这种域的类型是“作者”。
在文档中,作者域可以包含用户、群组或角色的名称。
如果一个用户在ACL中具有作者权限,同时,他的名字又包含在文档的作者域中,那么,这个用户就是该文档的所有者之一,可以修改此文档。
如果用户未被包含在作者域中,则即使此文档是由他创建的,也无权修改它。
作者域只对存取级别为作者的用户起作用。
其他的存取级别不受作者域的限制。
例如,存取级别为读者的用户,即使名字包含在作者域中,也无权修改文档;存取级别为编辑者以上的用户,不需要包含在作者域中也可以修改数据库中所有文档。
因此,在设计数据库时,如果需要仅允许用户修改库中的一部分文档,则需要加入作者域,以细化用户的权限。
编辑者编辑者具有更高的存取权限,可以修改数据库中的所有文档。
通过各个子选项的设置,还可以赋予编辑者以下权限:删除文档,创建个人代理,创建个人文件夹/视图,创建共享文件夹/视图,创建LotusScript/Java代理。
设计者作为设计者,用户可以修改数据库的设计,包括表单、视图等所有设计元素。
通过子选项的设置,还可以赋予编辑者以下权限:删除文档和创建LotusScript/Java代理。
如果不允许设计者创建LotusScript或Java代理,则他们不能对数据库中的LotusScript或Java代码进行修改。
管理者管理者具有所有的权限,包括修改ACL本身。
只有数据库的管理者才能赋予其他用户适当的权限。
为了保证管理者不会误删文档,也可以将他们自己“删除文档”的权限去掉。
返回创建代理和文件夹的选项与创建代理和文件夹有关的几个选项对从读者到设计者的存取级别都适用,因此有必要在此单独讨论。
个人代理,顾名思义,只有创建它的用户自己能够运行它。
例如,用户可以创建一个个人代理来对数据库中的文档进行排序。
如果用户在数据库ACL中有适当的权限,他所创建的代理就可以对数据库进行操作。
个人代理可以在服务器上后台运行,也可以在客户端上运行。
共享代理则是供所有用户公用的代理,读者以上权限的用户都可以运行。
每个用户都可以创建个人文件夹和视图。
如果“创建个人文件夹/视图”选项被选中,用户所创建的个人文件夹和视图都将保存到服务器上的数据库中,会占用服务器的资源。
如果此选项不选中,则用户所创建的个人文件夹和视图都将保存在客户端的桌面文件中。
共享文件夹和视图保存在服务器上的数据库中,可供所有用户使用。
用户要具有编辑者以上权限,“创建共享文件夹/视图”选项才可用。
LotusScript和Java代理是运行LotusScript或Java语言的代理,可以创建这类代理的用户就不仅能够使用公式和简单操作,还可以使用这两种语言进行编程,完成较为复杂的功能。
读写公用文档使用“读取公用文档”和“写公用文档”这两个选项可以让“不能存取者”或“存放者”读写特定的文档、表单、视图和文件夹,而不用给他们“读者”或“作者”的存取级别。
要想使文档成为公用文档,数据库的设计者需要作两方面的设置。
首先,在“表单”、“视图”和“文件夹”属性对话框的“安全性”附签中指定“对有公共存取权限的用户开放”选项。
其次,希望对有公共存取权限用户开放的文档,必须包含一个名为 $PublicAccess 的域。
$PublicAccess 域应该是文本域并且它的值应该等于1。
五种用户类型ACL中的用户类型有五种:个人,服务器,混合组,个人组和服务器组。
ACL中的每个名字都有自己的用户类型,当用户访问数据库时,所使用的ID文件的类型应与ACL中的用户类型相一致。
个人和个人组当用户访问服务器时,Domino会为用户生成一个名称列表,表中包括用户打开数据库时可以使用的所有名字,包括用户的公用名和所属的所有组名。
当用户打开一个数据库时,服务器可以检测到所使用的是用户自己的名字还是组名。
如果在ACL中一个用户的名称被错误地指定为“个人组”类型,则该用户无法打开数据库,因为他不是用群组的身份访问数据库。
服务器和服务器组服务器和服务器组都表示所用ID必须是服务器,不能用此身份从Notes客户端访问数据库。
这就保证了用户必须使用自己的ID,在有适当权限的时候才能访问数据库,避免某些用户获取服务器ID后,在客户端切换到服务器的ID来访问数据库。
例如,每个数据库的ACL中都包含的LocalDomainServers,就必须是服务器组类型,其中的每个成员都必须是一个服务器。
混合组混合组中既可以包含用户也可以包含服务器。
如果为某个名称指定了混合组类型,则无论使用个人的ID还是服务器的ID,无论从后台(服务器)访问还是从客户端访问,Domino都允许。
综上所述,当用户不能访问数据库时,需检查ACL中的存取权限设置,也要检查用户类型是否正确。
所指定的类型不正确时,也会影响用户的访问。
返回ACL的“角色”页面角色是对存取权限进行细化的重要手段。
初学者可能觉得角色很难理解,因为角色可以指定给ACL中的任一项目。
从某种意义上来说,角色可以理解为仅在本数据库内部起作用的群组。
当管理者希望在七级存取级别的基础上进一步细化存取权限时,可以使用角色。
例如,角色可以在作者域、读者域、隐藏公式等地方使用。
假设某个文档的读者域中只包含一个角色的名称,那么,不具有此角色的用户,即使拥有管理者权限也无法看到此文档。
使用角色对数据库的设计者和管理者都很方便。
对设计者来说,在开发阶段完全不必考虑最终用户的具体名称,也不必把群组的名称固定地写在代码中,只要定义并使用一系列角色即可。
特别是对数据库模板的设计者来说,这一点更为方便。
对管理者来说,不必为某个应用去修改公用通讯录,增加或删除群组,而只要将用户或群组的名称加入ACL,赋予他们适当的存取级别和角色,就可以让他们正常地使用该应用了。
Domino自带的模板中,使用角色的例子很多。
如公用通讯录中,就有[UserCreator]、[UserModifier]等8种角色,分别赋予用户不同的权限。
点击看大图ACL的“日志”页面日志页面显示了ACL的修改记录。
其中包括每次对ACL项目进行的增加、删除和更新。
不仅有用户对ACL所作的修改,也有服务器从后台修改ACL的记录。
ACL也可以被签名,签名者的信息显示在ACL对话框的底部。
签名信息描述了ACL最后是什么时候用哪个验证字修改的。
点击看大图ACL的“高级”页面高级页面中包括几项设置,以下分别说明。
点击看大图管理服务器在ACL中为数据库指定管理服务器之后,该服务器上的管理进程就可以对此数据库进行自动操作。
例如,当删除了用户时,管理进程可以自动从ACL中删除该用户对应的项目。
设置管理服务器可以保证ACL的自动更新,如果没有指定管理服务器,用户改名或删除后管理员需要手工更新数据库的ACL。
管理员还可以指定管理服务器是否修改数据库中的读者域和作者域。
如果用户在改名之后仍需保持原来的所有权限,则应使管理服务器修改数据库中的读者域和作者域;如果用户不再需要原来通过读者域和作者域所获得的权限,则应选择“不要修改读者和作者域”。
管理服务器必须是数据库(或数据库的复本之一)所在的服务器。
当指定了某个服务器是管理服务器后,在ACL的基本页面中,该服务器名称前面的图标会增加一把钥匙,如图所示。
点击看大图此数据库的所有复本使用相同的存取控制列表当数据库在客户端本地被打开时,用户实际上获得了管理者权限,无论他在ACL中的实际权限是什么。
这是由于安全性没有被强制遵守。
如果选中了“此数据库的所有复本使用相同的存取控制列表”选项,用户在本地就不能获得比ACL中规定的更高的权限。
如果用户修改了本地数据库复本的ACL,则此数据库复本将无法再与服务器上的数据库进行复制。
此选项对服务器和客户端同样有效。
如果一个服务器原来不是数据库的管理者,而此服务器上的复本的ACL被修改了,则此服务器上的复本将不能与其他服务器进行复制。
注意,选中此选项并未减低服务器的存取权限,也不会为用户或服务器增加权限。
这个选项只是保证复制时使用的是原来指定的权限。
Internet用户的最大权限无论在ACL中用户是什么存取级别(即使用户是数据库的管理者),当用户从Web浏览器登录时,最多只能获得此选项指定的权限,缺省是编辑者。
这样设置的原因是,基本Web身份验证(用户名和口令)并不是绝对安全,而且大部分设计和管理的工作从浏览器端也无法完成,那么,就没有必要对Internet用户开放这些权限了。
例如,用户在ACL中是管理者权限,但Internet用户的最大权限是读者,当用户从浏览器访问数据库时,用户只能是读者权限;要想对数据库进行管理,该用户必须使用Notes客户端。
查找类型为<未确定>的用户Lotus建议用户在ACL中使用用户类型,但用户类型并不是强制要选的。