Oracle:角色、表、权限作为矩阵

Oracle:角色、表、权限作为矩阵,oracle,matrix,roles,privileges,Oracle,Matrix,Roles,Privileges,在Oracle中有一个名为role_tab_privs的视图 其中详细说明了授予角色的表权限。 它有如下行(并非所有列都显示): 我希望能够将其显示为矩阵,如下所示: Role: role1 Table SELECT INSERT UPDATE DELETE ALTER EXECUTE table1 YES YES YES NO NO NO table2

在Oracle中有一个名为role_tab_privs的视图 其中详细说明了授予角色的表权限。 它有如下行(并非所有列都显示):

我希望能够将其显示为矩阵,如下所示:

Role: role1

Table     SELECT     INSERT      UPDATE     DELETE      ALTER      EXECUTE

table1     YES        YES         YES        NO          NO         NO
table2     YES         NO          NO        NO          NO         NO
etc.
我不确定如何在sql中实现这一点

更复杂的是,角色授予可以是分级的, 这样,如果角色B被授予角色A,则角色B具有 角色A的所有特权。在上述背景下 报告,要得到一个完整的列表,必须递归
遍历角色层次结构。

您好,您的答案在这里

SELECT role,TABLE_NAME,
       DECODE(PRIVILEGE,'SELECT','YES','NO') "SELECT",
       DECODE(PRIVILEGE,'INSERT','YES','NO') "INSERT",
       DECODE(PRIVILEGE,'UPDATE','YES','NO') "UPDATE",
       DECODE(PRIVILEGE,'DELETE','YES','NO') "DELETE",
       DECODE(PRIVILEGE,'ALTER','YES','NO') "ALTER",
       DECODE(PRIVILEGE,'EXECUTE','YES','NO') "EXECUTE"
FROM role_tab_privs
ORDER BY role;
SELECT role,TABLE_NAME,
       DECODE(PRIVILEGE,'SELECT','YES','NO') "SELECT",
       DECODE(PRIVILEGE,'INSERT','YES','NO') "INSERT",
       DECODE(PRIVILEGE,'UPDATE','YES','NO') "UPDATE",
       DECODE(PRIVILEGE,'DELETE','YES','NO') "DELETE",
       DECODE(PRIVILEGE,'ALTER','YES','NO') "ALTER",
       DECODE(PRIVILEGE,'EXECUTE','YES','NO') "EXECUTE"
FROM role_tab_privs
ORDER BY role;