Domino数据库存取控制列表(ACL)基本知识

12/3/2006来源:Lotus Notes人气:14439

内容
提要
在Domino中,数据库的存取控制列表是Domino安全性的重要组成部分,也是决定每个用户能否访问数据库的主要设置。本文详述了存取控制列表的各项设置,以帮助用户更好地理解并使用数据库的ACL。
ACL的“基本”页面
ACL的“角色”页面
ACL的“日志”页面
ACL的“高级”页面
存取控制列表 (ACL) 中可接受的名称
正文

在Domino中,数据库的存取控制列表是Domino安全性的重要组成部分,也是决定每个用户能否访问数据库的主要设置。每个数据库都有自己的存取控制列表(access Control List, 以下简称ACL)。打开一个数据库,选择菜单“文件”-“数据库”-“存取控制”,就可以看到该数据库的ACL。

ACL分为四个页面:基本、角色、日志和高级。以下分别说明这四个页面中的内容。并说明了ACL中可以接受的名称格式。

ACL的“基本”页面

ACL的核心功能都包含在“基本”页面中。在“个人/服务器/工作组”中选择“全部显示”,所有存取级别的用户都会被列出。也可以选择仅查看“管理者”、“设计者”等某个存取级别的用户。当选中某个用户名时,对话框中会显示他的用户类型和存取级别,以及与此存取级别相应的一些扩展和限制选项。用户类型和存取级别指定了用户对此数据库的最大权限。数据库的管理员可以增加、删除或修改用户的权限。

image

 

返回

七个存取级别
ACL中共有七个存取级别:管理者、设计者、编辑者、作者、读者、存放者和不能存取者。了解这些级别的含义是了解ACL工作机制的基础。下图显示了每个存取级别的缺省权限,从不能存取者开始,每个级别都比下一级拥有更多的权限,直到拥有所有权限的管理者。(每个级别的权限都包含其下所有级别的权限)。
image

不能存取者
此级别表示用户没有任何权限,不能存取数据库。管理员可以开放给不能存取者的权限只有“读取公用文档”和“写公用文档”。关于公用文档的概念,见下面的“读写公用文档”部分。

存放者和读者
存放者只能向数据库中放入文档,但不能读取这些文档。读者则只能读文档,但不能向数据库中放入文档。二者都只具有单一的功能。(读者拥有一个额外的权限,可以执行代理)。

作者
作者可以创建、修改、删除文档。但是,要想使拥有作者权限的用户能够修改、删除文档,还需要作进一步的设置:要创建文档,需要选中“创建文档”选项。要修改文档,需要设置文档中的作者域。要删除文档,需要选中“删除文档”选项,同时需要设置文档中的作者域。
在设计数据库时,有一类特殊的域称为作者域,这种域的类型是“作者”。在文档中,作者域可以包含用户、群组或角色的名称。如果一个用户在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种角色,分别赋予用户不同的权限。

image

 

ACL的“日志”页面
日志页面显示了ACL的修改记录。其中包括每次对ACL项目进行的增加、删除和更新。不仅有用户对ACL所作的修改,也有服务器从后台修改ACL的记录。
ACL也可以被签名,签名者的信息显示在ACL对话框的底部。签名信息描述了ACL最后是什么时候用哪个验证字修改的。

image

 

ACL的“高级”页面
高级页面中包括几项设置,以下分别说明。

image

 

管理服务器
在ACL中为数据库指定管理服务器之后,该服务器上的管理进程就可以对此数据库进行自动操作。例如,当删除了用户时,管理进程可以自动从ACL中删除该用户对应的项目。设置管理服务器可以保证ACL的自动更新,如果没有指定管理服务器,用户改名或删除后管理员需要手工更新数据库的ACL。
管理员还可以指定管理服务器是否修改数据库中的读者域和作者域。如果用户在改名之后仍需保持原来的所有权限,则应使管理服务器修改数据库中的读者域和作者域;如果用户不再需要原来通过读者域和作者域所获得的权限,则应选择“不要修改读者和作者域”。
管理服务器必须是数据库(或数据库的复本之一)所在的服务器。当指定了某个服务器是管理服务器后,在ACL的基本页面中,该服务器名称前面的图标会增加一把钥匙,如图所示。
image

 

此数据库的所有复本使用相同的存取控制列表
当数据库在客户端本地被打开时,用户实际上获得了管理者权限,无论他在ACL中的实际权限是什么。这是由于安全性没有被强制遵守。如果选中了“此数据库的所有复本使用相同的存取控制列表”选项,用户在本地就不能获得比ACL中规定的更高的权限。如果用户修改了本地数据库复本的ACL,则此数据库复本将无法再与服务器上的数据库进行复制。
此选项对服务器和客户端同样有效。如果一个服务器原来不是数据库的管理者,而此服务器上的复本的ACL被修改了,则此服务器上的复本将不能与其他服务器进行复制。
注意,选中此选项并未减低服务器的存取权限,也不会为用户或服务器增加权限。这个选项只是保证复制时使用的是原来指定的权限。
Internet用户的最大权限
无论在ACL中用户是什么存取级别(即使用户是数据库的管理者),当用户从Web浏览器登录时,最多只能获得此选项指定的权限,缺省是编辑者。这样设置的原因是,基本Web身份验证(用户名和口令)并不是绝对安全,而且大部分设计和管理的工作从浏览器端也无法完成,那么,就没有必要对Internet用户开放这些权限了。例如,用户在ACL中是管理者权限,但Internet用户的最大权限是读者,当用户从浏览器访问数据库时,用户只能是读者权限;要想对数据库进行管理,该用户必须使用Notes客户端。
查找类型为<未确定>的用户
Lotus建议用户在ACL中使用用户类型,但用户类型并不是强制要选的。当向ACL中添加项目时,用户类型可以是“未确定”。为了减轻管理者的工作,Domino提供了“查找类型为<未确定>的用户”按钮。点击此按钮,Notes会自动查询类型为“未确定”的项目,自动为这些项目添加类型。
例如,当ACL中有一个未确定类型的项目时,Notes会搜索公用通讯录,以确定此项目是用户还是群组。如果是群组,Notes会将此项目的类型设为混合组。出于性能方面的考虑,Notes不会逐一搜索群组中的每个成员,以确定其中是否只包含服务器。

返回

存取控制列表 (ACL) 中可接受的名称

存取控制列表中可接受的项目包括用户、服务器和群组名称、数据库复本标识符、用于 Internet 用户存取和匿名 Notes 用户存取的“匿名”名称、Internet 客户机的用户和群组名称以及等价名。每个名称最多包含 255 个字符。
通配符项目
要允许对数据库的一般存取,可以在存取控制列表中输入带有通配符 (*) 的层次名称。可以在公共名称和组织单元部分使用通配符。层次名的相应成分中含有通配符的所有用户和/或服务器将获得对数据库指定的存取权限。
例如,通配符格式的存取控制列表项目为:
*/Illustration/PRoduction/Acme/US
则Mary Tsen/Illustration/Production/Acme/US就拥有选定的存取级别,而Alan Nelson/Acme/US则没有此存取级别的权限。
在存取控制列表项目的最左边只能使用一个通配符。例如:不能使用项目:
*/Illustration/*/Acme/US
当使用带通配符的存取控制列表项目时,用户类型需设置为“未指定”、“混合组”或“个人组”。
用户名称
对于具有经过验证的 Notes 用户标识符的个人名称,或使用名称和口令或 SSL 客户机验证进行验证的 Internet 用户的名称,可以将其添加到存取控制列表中。

  • 如果正在添加的 Notes 用户名称与存储数据库的服务器的名称位于不同的层次组织,那么必须为此用户输入完整的层次名称,例如:John Smith/Sales/Acme。
  • 如果正在添加的 Notes 用户名称与存储数据库的服务器位于同一个层次组织,只需要输入其层次名的公共名称部分,例如:John Smith。为了确保更严密的名称安全性,最好使用完整的层次名。
  • 对于 Internet 客户,必须输入将要显示在“个人”文档的“用户名”域中的名字。存取控制列表中的“-Default-”存取项目和“Anonymous”项目必须设置为“不能存取者”;否则,Notes 将赋予 Internet 用户“-Default-”或“Anonymous”所具有的存取级别,而不是为用户指定的存取级别。


服务器名称

可以向存取控制列表中添加服务器的名称以控制数据库从数据库复本中接收的更改。

  • 如果正在添加的服务器名称与存储数据库的服务器位于不同的层次组织,那么必须为该服务器输入完整的层次名称,例如:Server1/Sales/Acme。
  • 如果正在添加的名称与存储数据库的服务器位于相同的层次组织,只需要输入层次名称的公共名称部分,例如:Server1。为了确保名称更严密的安全性,可以使用完整的层次名称。


群组名称
群组是对一个数据库需要相同存取权限的用户或服务器的列表。可以向存取控制列表中添加群组名(例如:Training)以表示需要相同存取权限的多个用户或服务器。存取控制列表中列出的任何群组,在添加到数据库存取控制列表之前必须已经存在于“Domino 目录”中,或者存在于“LDAP 目录”(在 Directory Assistance 数据库中已经为群组扩展配置了该目录)。
群组提供了管理数据库存取控制列表的便利方法。Domino 管理员能够向存取控制列表中添加一个群组,而不是添加一长串单独的名称。如果对数据库的存取权限改变了,管理员只需改变群组名的存取权限,而不必对列表中的每一个单独名称进行改变。要新建包含在存取控制列表中的群组,必须对数据库有“管理者”存取级别。
对于数据库的管理者,要使用单独的名称而不是群组名。于是,当用户选择“创建”“其他”“特殊便笺/给数据库管理员的便笺”时,他们可以知道自己在向谁寄信。
在存取控制列表中使用群组有如下优点:

  • 如果需要改变几个用户或服务器的存取级别,可以只对整个群组进行一次改变。如果群组列在多个存取控制列表中,可以在中心位置(即“Domino 目录”或“LDAP 目录”)修改成员列表,而不是在多个数据库中添加和删除名称。
  • 可以使用群组来使某些用户能够控制数据库的存取但不能改变设计。例如:可以在“Domino 目录”中为每个所需的数据库存取级别创建群组,将此群组添加到存取控制列表中,并允许特定的用户拥有该群组。如果这些用户在存取控制列表中没有“管理者”或“设计者”的存取级别,他们就不能修改数据库的设计。
  • 群组名称可以反映群组成员的职责或部门和公司的组织结构。

返回

终止群组
当雇员离开组织时,Domino 管理员应当从“Domino 目录”的所有群组中删除其名称,并将其添加到用于终止的群组中,该群组不能访问服务器。作为数据库管理者,您应当从您管理的所有数据库存取控制列表中删除终止的雇员名称。确保向存取控制列表中添加了终止群组并为此群组指定存取级别为“不能存取者”。
等价名
等价名是为已注册的 Notes 用户指定的可选别名。如果一个 Notes 用户有等价名,可以将其添加到存取控制列表中。等价名提供的安全性级别与主要的层次名称相同。用户必须列在群组中并有一个主要层次名或等价名。以等价名格式显示的用户名样例为:Sandy Smith/ANWest/ANSales/ANAcme,其中 AN 为等价名。
LDAP 用户
可以使用一个外部“LDAP 目录”验证 Web 用户。然后将这些 Web 用户的名称添加到数据库的存取控制列表以控制这些用户对数据库的访问。
也可以在包含这些 Web 用户名的外部 LDAP 目录中创建群组,然后将这些组做为整体添加到 Notes 数据库的存取控制列表中。例如:Web 用户可能试图使用 Domino Web 服务器来访问某个数据库。如果该 Web 用户成功通过了验证,且在数据库的存取控制列表中有一个名为“Web”的群组,那么服务器除了在主“Domino 目录”中搜索 Web 用户名外,还可以在位于外部 LDAP 目录中的群组“Web”中查找项目。注意,要使这种情况有用,Web 服务器上的“目录服务”数据库必须为启用了“群组扩展”选项的 LDAP 目录包含一个“LDAP 目录服务”文档。还可以使用此功能来查询存储在外部 LDAP 目录群组中的 Notes 用户以进行数据库存取控制列表检查。
向数据库的存取控制列表中添加 LDAP 目录用户或群组的名称时,请对名称使用 LDAP 格式,但使用斜杠 (/) 而不是逗号 (,) 作为分隔符。例如:如果 LDAP 目录中的用户名为:
uid=Sandra Smith,o=Acme,c=US
在数据库的存取控制列表中输入:
uid=Sandra Smith/o=Acme/c=US
如果在存取控制列表中输入了非层次结构的 LDAP 目录群组名称,则在项目中不要包含属性名,而只包含属性值。例如:如果 LDAP 群组名为:
cn=managers
在存取控制列表中只输入:
managers
不过,如果群组名为:
cn=managers,o=acme
则在存取控制列表输入:
cn=managers/o=acme
除了非层次结构群组名的情况下,在存取控制列表项目中要包含 LDAP 属性名。不过请注意,如果指定的属性名正好与 Notes 中使用的那些属性名 (cn, ou, o, c ) 一致,存取控制列表将不显示该属性。例如:如果在存取控制列表中输入下面的名称:
cn=Sandra Smith/ou=West/o=Acme/c=US
由于这些属性与 Notes 所使用的那些属性相对应,所以名称在存取控制列表中显示为:
Sandra Smith/West/Acme/US
匿名用户
任何匿名访问远程服务器的用户或服务器都被该远程服务器认作“Anonymous”。匿名访问被提供给未与服务器进行验证的 Internet 用户和 Notes 用户。
匿名访问通常提供给允许公共访问的服务器。通过在存取控制列表中输入名称“Anonymous”,可以控制授予匿名用户或服务器的数据库存取级别。典型地,可以给“Anonymous”用户指定对数据库具有“读者”存取级别。如果没有“Anonymous”项,则匿名用户将被赋予“-Default-”项的存取级别。
Domino 服务器使用单独的群组名称“Anonymous”以进行存取控制检查。例如:如果“Anonymous”在数据库存取控制列表中有“作者”存取级别,则用户的真名会出现在那些文档的“作者”域中。在文档的“作者”域中,Domino 服务器只能显示匿名 Notes 用户的真实名称,而不能显示匿名 Web 用户的真实名称。不管是否使用了匿名存取,“作者”域都不是安全功能;如果安全性需要作者名的有效性,那么文档应该签名。
复本标识符
通过将其它数据库的复本标识符包括在您所管理的数据库中,可以让位于相同服务器上的其它数据库的代理使用 @DbColumn 或 @DbLookup 从您管理的数据库提取数据。数据库存取控制列表中的复本标识符的样例为 85255B42:005A8fA4。
要确定数据库的复本标识符,选择“文件”“数据库”“属性”,并单击“信息”附签;或者选择“文件”“数据库”“设计摘要”,并选择“复制”。
提取数据库对数据库至少要有“读者”存取级别。通过向数据库存取控制列表中添加其它数据库的复本标识符并且指定它有“读者”或更高的存取级别,可以提供此存取级别。向存取控制列表中添加复本标识符可以直接键入,或者从“设计摘要”中拷贝并粘贴到存取控制列表中。能够以大写或小写键入复本标识符,但是不要将其用引号引起来。如果没有向存取控制列表中添加复本标识符,但数据库“-Default-”项的存取级别是“读者”或更高时,其它数据库仍然可以提取数据。