Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 数据库管理 » 用户和数据库安全 » 用户安全性(角色和特权) » 教程:授予角色和特权 (SQL)

 

第 5 课:查看 UserB 的角色和特权 (SQL)

您可以查看用户的角色、系统特权和对象级特权,包括用户以其它角色的成员资格继承的角色、系统特权和对象级特权。

前提条件

本课假定您已完成此教程前面的所有课程。请参见第 4 课:将 UserA 转换为用户扩展角色并将该角色授予 UserB (SQL)

 任务
  1. 在 Interactive SQL 中,执行以下语句以查看 UserB 的角色和特权(包括管理权限):

    CALL sp_displayroles ( 'UserB', 'expand_down' );
    role_name parent_role_name grant_type role_level
    UserA (NULL) NO ADMIN 1
    PUBLIC (NULL) NO ADMIN 1
    dbo PUBLIC NO ADMIN 2
    PUBLIC UserA NO ADMIN 2
    DebugAndFix UserA ADMIN 2
    BACKUP DATABASE UserA NO ADMIN 2
    VALIDATE ANY OBJECT UserA NO ADMIN 2
    ALTER ANY OBJECT DebugAndFix NO ADMIN 3
    DEBUG ANY PROCEDURE DebugAndFix NO ADMIN 3
    dbo PUBLIC NO ADMIN 3

    将 role_level 值视为继承层次中的一个级别,其中 UserB 为级别 1:

    • 从值为 role_level 1 的行中,您可以看出 UserA 角色已被直接授予 UserB。还可以看出 PUBLIC 角色已被直接授予 UserB。PUBLIC 角色自动被授予新用户。

    • 从值为 role_level 2 的行中,您可以看出 UserB 从 UserA 继承 dbo 和 PUBLIC 角色。UserB 还继承已授予 UserA 的 DebugAndFix 角色,包括对该角色的管理权限。最后,UserB 继承已授予 UserA 的 BACKUP DATABASE 和 VALIDATE ANY OBJECT 系统特权。

    • 从值为 role_level 3 的行中,您可以看出 UserB 从 UserA 继承 ALTER ANY OBJECT 和 DEBUG ANY PROCEDURE 系统特权,而这些特权 UserA 是从 DebugAndFix 角色中继承而来。UserB 还会从 PUBLIC 角色再次继承 dbo,dbo 在 DebugAndFix 角色创建时已被自动授予该角色。

  2. 执行以下语句以查看 UserB 具有的对象级特权。

    CALL sp_objectpermission ( 'UserB' );
    grantor grantee object_name owner object_type column_name permission grantable
    ... ... ... ... ... ... ... ...
    DBA UserA Employees GROUPO TABLE (NULL) SELECT Y
    DBA UserA Employees GROUPO TABLE (NULL) UPDATE Y
    SYS PUBLIC spt_collation_map dbo TABLE (NULL) SELECT N
    ... ... ... ... ... ... ... ...

    由于用户作为 PUBLIC 角色的成员继承了很多内容,因此结果集非常长。但有用的行是上表中的第二行和第三行,因为这两行反映 UserB 继承对 Employees 表的 SELECT 和 UPDATE 特权。您还可以看出这两个特权是由用户 DBA 授予的。

  3. 对象级特权的管理权限不可继承,因此即使 DBA 已授予 UserA 权限以授予对 Employees 表的 SELECT 和 UPDATE 特权,UserB 仍无法继承这些管理权限。这些行的可授予列中的 Y 表示 UserA 具有对特权的管理权限。

结果

您已验证授予 UserB 以及由 UserB 继承的角色和特权。

 另请参见