暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

oracle权限理解

程序碎碎念 2021-10-13
722

权限分为
1.直接权限系统权限(可以赋给角色和用户) 和对象权限(直接将某个表、视图、存储过程等对象的操作权限赋给用户或角色)
2.间接权限 角色赋予用户所带有的权限

较为方便的设权限为:先设角色权限 然后将角色赋予给用户,这样不会导致管理混乱,直接赋予用户系统权限容易导致管理混乱

△.如果是授予的DEFAULT的时候,那么这个用户登录的时候自动就具备了这个角色,不需要进行这个角色的密码验证的。如果不是DEFAULT的,那么可以使用SET ROLE ROLE_NAME IDENTIFIED ROLE_PASSWORD来进行密码验证后,用户才能具有相应的角色。所以你即使给用户赋予了某个角色,如果没有设置defaule,登录后是默认不生效的

    alter user syc default role allalter user syc default role r1;
    复制

    一些视图:
    -- 确定角色的权限

      select * from role_tab_privs ;              包含了授予角色的对象权限
      select * from role_role_privs ; 包含了授予另一角色的角色
      select * from role_sys_privs ; 包含了授予角色的系统权限
      -- 确定用户帐户所授予的权限
      select * from DBA_tab_privs ; 直接授予用户帐户的对象权限
      select * from DBA_role_privs ; 授予用户帐户的角色
      select * from DBA_sys_privs ; 授予用户帐户的系统权限


      复制

      (1)系统权限(角色1下有角色2,角色2下没有角色,角色再套角色需要接着查赋予用户的角色上的角色权限):

        select * from (
        select grantee,privilege,'' role1,'' role2
        ,'' DEFAULT_ROLE from dba_sys_privs
        --直接赋予用户的系统权限
        union all
        select b.grantee,privilege,
        b.grantee,b.GRANTED_ROLE role,b.DEFAULT_ROLE from dba_sys_privs a
        ,dba_role_privs b where
        a.GRANTEE=b.GRANTED_ROLE
        --赋予用户的角色权限
        union all
        select b.grantee,privilege,b.granted_role role1
        ,c.GRANTED_ROLE role2,b.DEFAULT_ROLE
        from dba_role_privs b,dba_role_privs c,dba_sys_privs a
        where b.GRANTED_ROLe=c.GRANTEE and
        a.GRANTEE=c.GRANTED_ROLE
        --赋予用户的角色上的角色权限
        ) where grantee ='SYC'


        复制

        (2)对象权限(角色1下有角色2,角色2下没有角色,角色再套角色需要接着查赋予用户的角色上的角色权限):

          select * from (
          select owner,privilege,table_name,
          '' role1,'' role2 from DBA_tab_privs --直接赋予用户的系统权限
          union all
          select a.owner,privilege,table_name,
          b.grantee role ,'' from role_tab_privs a,dba_role_privs b where
          a.role=b.GRANTED_ROLE and b.grantee='JULAN'
          --赋予用户的角色权限
          union all
          select b.grantee,privilege,b.granted_role role1
          ,c.GRANTED_ROLE role2 from dba_role_privs b
          ,dba_role_privs c,role_tab_privs a
          where b.GRANTED_ROLe=c.GRANTEE and
          b.grantee='JULAN' and a.role = c.granted_role
          --赋予用户的角色上的角色权限
          ) where owner ='SYC'


          复制

          授予存储过程的查询权限:

            CREATE PROCEDURE、创建存储程序


            CREATE ANY PROCEDURE、 创建任何存储程序


            ALTER ANY PROCEDURE、更改任何存储程序


            DROP ANY PROCEDURE、删除任何存储程序


            EXECUTE ANY PROCEDURE、执行任何存储程序


            DEBUG ANY PROCEDURE.查看定义任何存储程序


            而实际上存储程序的对象权限只有EXECUTE和DEBUG两种,
            execute有查看和执行的权限
            debug只有查看的权限
            授予所有存储过程查询权限只需:grant debug any procedure to xxx;


            用户自己查询:
            查询授出去的对象权限
            select * from user_tab_privs_made;
            select * from all_tab_privs_made;
            用户拥有的对象权限
            select * from user_tab_privs_recd;
            select * from all_tab_privs_recd;


            用户分配出去的列的对象权限
            select * from user_col_privs_made;
            select * from all_col_privs_made;


            用户拥有的关于列的对象权限
            select * from user_col_privs_recd;
            select * from all_col_privs_recd
            复制
            文章转载自程序碎碎念,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论