另一种避免逐个实例地更改用户特权这种困难的方法是使用角色。数据库环境中的角色概念与操作系统中的组概念类似。角色是一项数据库功能,它允许 DBA 通过将许多用户视为某个类的成员,从而将这些用户的访问特权标准化并进行更改。(无法为用户定义的角色授予数据库级别的特权 Connect、Resource 或 DBA,但角色可拥有数据库对象的自主访问特权,包括对表对象、表分段、用户定义的数据类型、用户定义的例程和编程语言的特权。)
例如,如果您向 PUBLIC 组授予处理公司新闻和消息的每个数据库的 Connect 特权,那么可以创建名为 news_mes 的角色,并为该角色授予对表的 Insert 和 Delete 特权,为其授予该角色的员工可在这些表中添加或删除行。有新到员工时,只能将该人员添加至 news_mes 角色。通过发出 SET ROLE news_mes 语句来启用该角色,新员工将获取 news_mes 角色的访问特权。(或者,也可以在需要这些特权的每个数据库中定义 user.sysdbopen 过程(其中 user 是新员工的权限标识),用于在用户连接数据库时自动执行 SET ROLE news_mes 语句。)
此过程在相反方向上也能起作用。要更改为其授予了 news_mes 角色的每个人员的自主访问特权,请使用 GRANT 或 REVOKE 语句在定义 news_mes 角色的每个数据库中更改该角色的特权。