SQL 中的角色

2025年2月3日 | 阅读 5 分钟

在本篇文章中,我们将了解 SQL 中角色的概念、如何创建和使用它以及它的各种功能。

什么是角色?

很少有多个用户需要相同的权限。在这种情况下,您可能需要为要授予这些权限的每个用户指定用户名。撤销命令也是如此。因此,管理授予和撤销权限的过程是分组的,然后授予用户。这种命名的相关权限组用于将权限集放入组中。这些分组的权限集然后可以授予多个用户,以便这些用户可以履行特定的功能。这些功能可以是数据库对象或系统权限,也可以是两者。角色通常是为数据库应用程序创建的。可以将多个用户分配给同一个角色。角色通常以工作职能命名,但没有必要这样做。

例如:在人力资源应用程序中,可以定义 4 种不同的角色,例如员工、经理、人力资源管理员和总裁,然后将这些角色分配给员工以匹配他们的工作职能。

可以将权限授予角色组 1。可以将这些角色授予不同的用户,以便他们可以运行不同的应用程序。

在下图所示中,它展示了如何在没有角色的情况下向用户授予权限。

Roles in SQL

在以下图表中,它展示了如何在有角色的情况下向用户授予权限。

Roles in SQL

Oracle 有许多预定义角色。这些角色在创建数据库时创建。

角色系统权限
CONNECTAlter session, Create Cluster, Database Link, sequence, session, synonym, Table, View 等
 
角色系统权限
RESOURCEUnlimited Tablespace, Create Cluster, Create Procedure, Create Sequence, Create Table, Create Trigger 等。
DBA它包括所有系统权限。如果创建了 EXP_FULL_DATABASE 和 IMP_FULL_DATABASE 角色,它们也会自动授予 DBA 角色。
EXP_FULL_DATABASESelect any Table, Backup any Table
IMP_FULL_DATABASEBECOME_USER

角色的好处

  • 它减少了需要分配给用户的授权数量,并简化了安全管理。
  • 它可以使用单个 GRANT 或 REVOKE 语句修改多个用户的权限。
  • 它可以根据应用程序启用或禁用权限组。

创建角色

使用 create Role 语句,您可以创建一个新角色,为其分配一些权限,甚至分配之前创建的其他角色。

以下语法用于创建角色

在上面的语法中,<rolename> 是创建的角色的名称。NOT IDENTIFIED 表示角色由数据库授权,不需要密码即可启用它。IDENTIFIED 用于指示在启用 SET ROLE 语句的角色之前,用户必须经过指定方法的授权。如果省略了 NOT IDENTIFIED 和 IDENTIFIED 选项,则标准角色将不会被识别。默认情况下,角色将在没有密码的情况下创建。如果使用 IDENTIFIED BY 子句创建角色,则该角色默认处于禁用状态。BY password 用于创建带密码的本地角色。BY EXTERNALLY 用于创建外部角色,BY GLOBALLY 用于创建全局角色。

让我们考虑以下命令集

执行后,将创建 SALESMAN_ROLE。GRANT 命令的语法与用户命令的语法相同。

授予角色权限

以下示例用于授予角色

执行后,它将 CREATE TABLE 权限分配给 SALESMAN_ROLE 角色。

将角色授予用户

如果要将角色授予其他用户,我们将使用以下语句

执行后,用户 'anshu' 将拥有授予给 SALESMAN_ROLE 角色的所有权限。在将角色授予用户时,您可以选择使用 administrator option 子句授予角色。

将角色授予另一个角色

您还可以使用 GRANT 命令将角色授予另一个角色,假设您想将 CONNECT 角色授予 SALESMAN_ROLE 角色。

它将继承已授予 connect 角色的任何权限。

从角色中撤销权限

要使用 REVOKE 命令从角色中撤销权限,该命令的语法与从用户那里撤销权限时使用的语法相同。因此,如果您想从 SALESMAN_ROLE 中撤销 CONNECT 角色,请执行以下命令。

删除角色

如果不再需要该角色,可以使用 DROP role 命令删除角色。

每当删除角色时,关联的权限将从数据库中移除。

启用和禁用角色

数据库角色可以为数据库用户会话启用或禁用。默认情况下,分配给用户的每个角色都为数据库会话启用。SET ROLE 语句用于为当前会话启用数据库角色。要禁用当前会话中的所有角色,请使用以下命令。

启用非默认角色

如果要启用当前数据库会话中的所有角色,请使用以下语句

您还可以使用 ALTER USER 命令启用 SALESMAN_ROLE 角色。

ALTER ROLE 或 ATTER USER

此语句用于修改角色密码并为角色设置默认会话变量值。以下是各种示例列表。

为数据库角色设置密码保护

通过将密码与角色关联,可以获得额外的安全级别。默认情况下,角色没有关联的密码。当您想在不撤销权限的情况下暂时暂停对数据库对象集合的访问时,使用带密码的角色通常很方便。

现在假设我们要禁用用户 'anshu' 的所有已授予角色。

执行后,它将禁用用户 'anshu' 的所有角色。如果要查看角色是否已被禁用,请使用以下命令。

现在,如果我们想执行通过 SALESMAN_ROLE 授予 'anshu' 的任何权限,它将不起作用。所以,首先您必须启用角色才能使用其权限。

现在您可以执行 SALESMAN_ROLE 提供的任何权限;