DBA 或数据库的所有者(缺省情况下,用户 gbasedbt)可以 GRANT DEFAULT ROLE 语句为一个或多个用户,或为 PUBLIC 定义缺省的角色。当该用户连接到数据库时,激活一个缺省的角色。不需要 SET ROLE 语句来激活缺省的角色。
如果用户通过客户端应用访问数据库,该应用不可更改访问权限也不可设置角色,则缺省的角色非常有用。
CREATE ROLE accounting; GRANT ALTER, INSERT, SELECT ON stock TO accounting; GRANT DEFAULT ROLE accounting TO mary, asok, vlad;
最后的语句提供给用户 mary、asok 和 vlad 以 accounting 作为他们的缺省的角色。如果这些用户中的任何人连接到数据库,则那个用户激活 accounting 角色持有的任何权限,除了用户作为个别用户或作为 PUBLIC 已经拥有的任何角色之外。
该角色必须已经存在,且该用户必须有访问权限来设置该角色。如果先前不曾将该角色授予用户,它会被作为设置缺省的角色的一部分被授予。
如果既未为用户也未为 PUBLIC 定义缺省的角色,那么不设置角色,且用户的现有权限有效。
DATABASE hrdb; CREATE ROLE emprole; GRANT CONNECT TO PUBLIC; GRANT SELECT ON emptab TO emprole; GRANT emprole TO PUBLIC; GRANT DEFAULT ROLE emprole TO PUBLIC;
为用户或为 PUBLIC 更改缺省的角色仅影响新的数据库连接。在当前分配的角色之下,现有的连接继续运行。如果将缺省的角色授予了 user,且另一缺省的角色授予了 PUBLIC,则在连接的时候,授予 user 的缺省的角色优先。
不可将缺省的角色分配给另一角色。因为角色不是跨数据库定义的,必须为每一数据库分配缺省的角色。在 GRANT DEFAULT ROLE 语句中的 TO 关键字之后,除了 user-list 之外没有有效的选项。如果您尝试包括 AS grantor 子句或 WITH GRANT OPTION 子句,则数据库服务器发出错误。