Oracle-12-数据库安全性(用户&权限)

目录

1、用户

2、系统特权

3、对象特权

4、角色


1、用户

  1. 创建用户:
    1. 在数据库中建立用户,就要使用到 create user 语句:
      create user user_name identified by password 
      [default tablespace def_tabspace]
      [temporary tablespace temp_tabspace]
      
      · def_tabspace 指定存储对象使用的默认表空间;这些对象包括表。如果此处忽略了默认的表空间,就默认使 
        用system表空间,这个表空间在所有的数据库中都存在。
        ****注意:数据库使用表空间来分隔对象。
      · tmp_tabspace 指定保存临时对象所使用的的默认表空间。这些对象包括临时表;如果在此处忽略了临时表空
        间,就默认使用system表空间。
      price:
      connect system/manager
      create user jason identified by price ;
      
      ***注意:
          想要运行这些例子,需要以一个特权用户的身份连接到数据库中。
      create user henry identified by hooray
      default tablespace users
      temporary tablespace temp ;

      **在此处,如果不知道自己数据库的表空间的话,可以使用下面的语句查询:

      select * from dba_tablespaces ;
      **特权用户才能够执行
    2. 新建立的用户是没有任何的权限的,如果需要用新用户进行操作的话就需要授予新用户相应的权限。例如,如果需要连接到数据库的话就需要为新用户授予“连接数据库”的权限,或者授予“创建会话”的权限。

      --授予创建会话的权限
      grant create session to jason ;
      --授予连接数据库的权限
      grant connect to jason ;
    3. 创建另外两个用户,方便接下来的演示:

      create user steve indentified by button ;
      create user gail identified by seymour ;
      grant create session to steve,gail ; 
  2. 修改用户密码
    1. 用户的密码可以使用 alter user 语句进行修改,前提是登录的用户为特权用户:
      alter user jason identified by marcus ;
      **只有特权用户才可以对创建的普通用户进行密码的修改
    2. password命令可以用来修改当前登录着的用户的密码,在数如password命令之后,如下:

      SQL> password
      更改 TEST 的口令
      旧口令:
      新口令:
      重新键入新口令:
      口令已更改
      SQL>
  3. 删除用户
    1. 删除用户的时候使用下面的命令,只有特权用户才能够对普通用户进行删除操作:
      drop user user_name ;
      example:删除用户jason
      drop user jason ;
      **注意**:
          如果删除的用户模式中包含对象(例如表等等),就必须在drop user语句中在要删除的用户名后面加上关键字cascade。
      

2、系统特权

  1. 向用户授予系统特权
    1. 系统特权(system privilege)允许用户在数据库执行特定的操作,比如执行DDL语句。常用的系统特权如下表:
      表2-1 常用的系统特权表
      create session连接到数据库
      create sequence创建序列
      create synonym创建同名对象。同名对象用于引用其他模式中的表
      create table创建表
      create any table在任何模式中创建表
      drop table删除表
      drop any table删除任何模式中的表
      create procedure常见存储过程
      execute any procedure执行任何模式中的存储过程
      create user创建用户
      drop user删除用户
      create view创建视图。视图是存储的查询,可以用来对多个表和多列进行访问,然后就可以想查询表一样查询视图。
    2. 授予用户系统权限的语法如下:

      grant 想要授予的权限 to user ;
    3. 向steve用户授予create session,create user,create  table 的权限:
      1. grant  create session,create table,create user to steve ;

        **注意**

            此处也可以使用 with admin option 选项,这样所授权的用户就可以把这种特权在授予其他用户。下面的这个例子将 execute any procedure 权限授予 steve 用户,同时制定了 with admin option选项:
        grant execute any procedure to steve with admin option ;
            然后 steve 就可以将 execute any procedure 授予其他的用户了。下面以steve用户的身份连接到Oracle数据库上,并将 execute any procedure 权限授予 gail 用户:
        connect steve/button ;
        grant execute any procedure to gail ;
        
      2. 将一种系统特权授予PUBLIC,可以将该特权授予所有的用户。下面以system身份连接到是数据库上,并将 execute any procedure特权你授予public:

        connect system/manager ;
        grant execute any procedure to punblic ;
        现在数据库的所有的用户都具有execute any procedure特权了。
  2. 检查授予用户的系统特权
    1. 通过查询 user_sys_privs 可以检查某个用户具有哪些系统特权。
      表2.2 user_sys_privs 的部分列
      类型说明
      usernamevarchar2(30)当前用户的姓名
      privilegevarchar2(40)系统特权
      admin_optionvarchar2(3)该用户是否能够将这种特权授予其他的用户
      SQL> select * from user_sys_privs ;
      
      USERNAME                       PRIVILEGE                                ADM
      ------------------------------ ---------------------------------------- ---
      STEVE                          CREATE SYNONYM                           NO
      STEVE                          CREATE SESSION                           NO
      STEVE                          UNLIMITED TABLESPACE                     NO
      PUBLIC                         EXECUTE ANY PROCEDURE                    NO
      STEVE                          CREATE TABLE                             NO
      STEVE                          CREATE USER                              NO
      
      已选择6行。
  3. 使用系统特权
    1. 系统用户被授予特权之后,就可以使用这种特权来执行特定的任务。例如steve具有create user的特权,因此可以创建用户。
  4. 撤销用户的系统特权
    1. 可以使用 revoke 语句撤销某个用户的系统特权。下面这个例子以system用户的身份连接到数据库,并撤销 steve 用户的 create table 特权:
      connect system/manager ;
      revoke create table from steve ;
      --下面的这个例子撤销 steve 用户的 execute any procedure 的系统特权:
      revoke execute any procedure from steve ;

3、对象特权

  1. 向用户授予对象特权
    1. 对象特权(Object privilege)允许用户对数据库对象执行特定的操作,比如对表执行DML语句。例如,insert on store.products 特权就可以允许用户向store模式的products表中插入行。
      表3-1 常用的对象特权
      对象特权允许执行的操作
      SELECT允许执行查询操作
      INSERT
      UPDATE
      DELETE
      EXECUTE执行存储过程
  2. 对象特权授予
    1. 可以使用 grant 语句向用户授予对象特权。
      connect store/store_passsword ;
      grant select,update,insert on store.products to steve ;
      grant select on store.employees to steve;
      --上述以 store 的身份连接到数据库,并向 steve 用户授予以下的特权:对products表的select、----
      --update、insert对象特权,以及对employees表的select特权。

      **下面的这个例子将对 last_name 和 salary 列的 update 特权授予 steve 用户:

      grant update(last_name,salary) on store.products to steve ;
      **采用这种授权的方式的时候只能单独对 update 进行授权,不能和别的对象特权一起授予,否则会失效。
      

      **此处也可以使用 grant 选项,这样授权的用户就可以把这种特权在授予别的用户

      connect store/store_password ;
      grant select on store.customers to steve with grant option ;
      

      **注意:当希望所授权的用户可以将对象特权授予其他用户时,使用 grant 选项;当希望所授权用户将系统特权授予其他用户时,使用admin选项。

  3. 检查已授予的对象特权
    1. 通过查询 user_tab_privs_made 可以检查某个用户对哪些表向其他表开放了哪些对象特权。
      select * from user_tab_privs_made ;
      --检查的是所登录的用户的
    2. 通过查询 user_col_privs_made 可以检查某个用户对那些列对象开放了哪些特权。

      select * from user_col_privs_made ;
      表3-2 user_col_privs_made 的部分列
      说明
      grantee该特权所授予的用户
      table_name所授予的特权所操作的对象名
      column_name所授予的特权所操作的对象名
      grantor授权者
      privilege对该对象所授予的特权
      grantable特权所授予的用户是否可以将这种特权在授予其它的用户。该值等于yes或者no
  4. 检查以接受的对象特权
    1. 通过查询user_tab_privs_recd可以检查某个用户被授予哪些表上的对象特权。
    2. 通过查询user_col_privs_recd可以检查某个用户被授予了那些列的对象特权。
  5. 使用对象特权
    1. 被授予相应的对象特权之后,就可以使用对象特权执行特定的任务了 。
  6. 同名对象
    1. 在上一节的例子中,可以通过指定一个模式名后面跟上一个表名来访问其他模式中的表。例如,当steve用户对store模式中customers表进行检索时,就要岁store.customers执行select语句。为表创建同名对象(synonym)之后就可以不用再输入模式名了,同名对象是使用 create synonm 语句创建。
      1、首先以system用户的身份连接到数据库中,并将 create synonym系统特权授予 steve 用户:
          connect system/manager ;
          grant create synonym to steve ;
      2、然后以steve用户的身份连接到数据库上,并执行一条 create synonym 语句,为 store.customers 表创建一个同名对象:
          connect steve/123456 ;
          create synonym customers for store.customers ;
      3、要对 store.customers 对象进行检索,steve 用户的只需要执行:
          select * from customers ; 
  7. 公共同名对象
    1. 创建公共同名对象(public synonym)。在创建公共同名对象之后,所有的用户都可以看到这个同名对象。
      1、以system用户身份连接到数据库上,
          connect system/manager ;
      2、将create public synonym系统特权授予store用户
          grant create public synonym to store ;
      3、以store用户的身份连接到数据库上
          connect store/store_password ;
      4、为 store.products 创建一个公共同名对象 products 。
          create public synonym products for store.products ;
      

      **即使已经为 store.products 创建了公共同名对象,用户仍然需要具有对该表的对象特权才能真正对该表进行访问。

    2. 如果用户具有其他对象特权,那么这个用户就可以通过同名对象来使用这些对象特权。例如,如果 gail 对 store.products 表具有 insert特权,那么gail就可以通过同名对象 products 向 store.products 添加行。

  8. 撤销用户的对象特权
    1. 可与使用 revoke 语句撤销某个用的对象特权。下面这个例子以store用户的身份连接到数据库上,并撤销 steve 用户对 products 表的 insert 特权:
      connect store/store_password ;
      revoke insert on products from steve ;
      下面的这个例子撤销steve用户对 customers 表的 select 特权:
      revoke select on store.customers from steve ;
      在撤销steve用户的select on store.customers特权时---steve已经将这种特权由授予了gail----gail也同时失去了这种特权。

4、角色

        角色(role)就是一组特权,它可以分配给一个用户或者其他角色。角色的优点可以总结为如下几点:

        1)特权不是每次一个直接授予一个用户;而是先创建角色,向该角色授予一些特权,然后再将该角色授予多个用户或其他角色。

        2)在增加或者删除一个角色的某种特权时,被授予该角色的所有用户和角色都会自动获得新加的特权或者自动失去这种特权。

        3)可以将多个角色授予一个用户或者角色。

        4)可以为角色设置密码

  1. 创建角色
    1. 要创建角色,必须具备 create role 特权。下面的这个例子,store用户被授予带有 with admin option 选项的 create user 系统特权。
      1、以system用户的身份连接到数据库上:
          connect system/manager ;
      2、授予 store 用户创建角色的权限:
          grant create role to store ;
      3、授予 store 用户带有 with admin option 选项的create role系统特权:
          grant create user to store with admin option ;
      1. 下表中列出了将要创建的角色:

        要创建的角色
        角色名具有的权限
        product_manager对product_types和products标执行select,insert,update和delete操作
        hr_manager对salary_grades和employees表执行select,insert,update和delete操作。hr_manager还可以创建用户
        overall_manager对前面两个角色涉及到的所有的标执行select、insert、update和delete操作,overall_manager会被授予以上两个角色
        1、连接到system用户上
            connect store/store_password ;
        2、创建角色product_manager:
            create role product_manager ;
        3、创建角色hr_manager:
            create role hr_manager ;
        4、创建角色overall_manager:
            create role overall_manager identified by manager_password ;
  2. 为角色授权
    1. grant 语句可以用来将特权授予角色:
      grant select,insert,update,delete on product_types to product_manager ;
      grant select,insert,update,delete on propducts to product_manager ;
      grant select,insert,update,delete on salary_grades to hr_manager ;
      grant create user to hr_manager ;
      grant product_manager,hr_manager to overall_manager ;
  3. 将角色授予用户
    1. grant ovarall_manager to steve ;
  4. 检查授予用户的角色
    1. 通过查询 user_role_privs 可以检查已经授予了一个用户哪些角色。
  5. 检查授予角色的系统特权
    1. 通过查询  role_sys_privs 可以检查已经授予了一个角色哪些系统特权。
  6. 检查授予角色的对象特权
    1. 通过检查 role_tab_privs可以检查已经授予一个角色哪些对象特权。
  7. 使用授予角色的特权
  8. 默认角色
  9. 撤销角色
    1. revoke语句可以用来撤销角色
      connect store/store_password ;
      revoke overall_manager from steve ;
      
  10. 从角色中撤销特权
    1. revoke可以用来从角色中撤销某种特权
      revoke all on product_types from product_manager ;
      revoke all on products from product_manager ;
  11. 删除角色
    1. drop role 可以用来删除角色:
      drop role overall_manager ;
      drop role product_manager ;
      drop role hr_manager ;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值