zoukankan      html  css  js  c++  java
  • Oracle用户和权限

     用户权限

    安装完 Oracle,缺省有两个用户:

    1. SYS 用户,又叫数据库系统管理员、特权用户,数据库中至高无上的存在。
      • 它是数据库的系统管理员,负责数据库的安装、维护、升级、备份、恢复、优化等操作。
      • 在它之下,保存着数据库所有的系统字典。
      • 不能用 normal 身份登录,必须用 SYSDBA/SYSOPER 身份登录。
    2. SYSTEM 用户,数据库管理员,它拥有 DBA 角色,主要负责对数据库中各种对象,各种资源的管理。
    3. SCOTT 用户,一个示例用户,默认是锁定的,需要解锁使用。

    新创建的用户,是不能做任何事情的(甚至不能登录)。 必须要为用户授予权限,才能做相应的事情。 可以说,用户是权限的容器。

    权限分为两种:

    oracle_privs.jpg5.1 用户(User)

    用户是用于 资源管理 和 权限控制 的一个概念。

    -- 创建用户的语法
    CREATE USER name
      IDENTIFIED BY password          -- 一个用户,至少拥有用户名和密码
      [DEFAULT TABLESPACE users]      -- 指定此用户下数据默认保存位置,如果不指定,默认为 Users 表空间
      [TEMPORARY TABLESPACE temp]     -- 指定临时表空间,默认为 temp 表空间
      [QUOTA 100M/unlimited ON USERS] -- 在表空间上有多少空间的使用权力,默认为 0, unlimited 表示无上限
      [ACCOUNT LOCK/UNLOCK]           -- 账号的初始状态:锁定/未锁定,默认为未锁定
      [PASSWORD EXPIRE]               -- 账号的初始状态:强制要求重设密码,默认不强制
      [PROFILE DEFAULT]               -- 指定使用的资源文件,默认是 default
    ;
    
    -- 修改用户的语法
    ALTER USER name [跟创建用户的参数是一样的];
    
    -- 删除用户的语法
    DROP USER name [cascade];
    

    为了对用户行为有更精细的控制,需要使用 资源文件 (profile)。 资源文件是口令限制、资源限制的命名集合。

    -- 增加资源文件的语法
    CREATE PROFILE name LIMIT
      RESOURCE_参数 n/unlimited/default  -- 控制的是资源的占用
      PASSWORD_参数;                     -- 控制的是密码的使用
    
    -- 修改资源文件的语法
    ALTER PROFILE name ...;
    
    -- 删除资源文件的语法
    DROP PROFILE name;
    
    -- 为用户指定资源文件
    ALTER USER name PROFILE profile_name;
    

    常用资源文件选项:

    名字类型介绍
    SESSIONS_PER_USER resource 每个用户最多能创建的连接数
    CONNECT_TIME resource 每个连接最多能保持的时间(分钟)
    IDLE_TIME resource 每个连接不操作多长时间自动断开(分钟)
    CPU_PER_SESSION resource 每个连接最多能占用的 CPU 时间(百分之一秒)
    LOGICAL_READS_PER_SESSION resource 每个连接最多能读取的数据块
    PRIVATE_SGA resource 最多占用的 SGA 大小
    PASSWORD_LIFE_TIME password 限制指定时间中必须重新修改密码(天)
    PASSWORD_REUSE_TIME/MAX password 密码重用的限制
    FAILED_LOGIN_ATTEMPTS password 允许的密码输错次数
    PASSWORD_LOCK_TIME password 因输错密码锁定的天数(天)
    PASSWORD_VERIFY_FUNCTION password 用于自定义密码验证

    操作示例:

     -- 所有的用户信息,保存在字典表 dba_users 里面
     select * from dba_users where USERNAME='VIP';
     -- 所有的资源文件信息,保存在 dba_profiles 里面
     select * from dba_profiles where profile='DEFAULT';
    
    
     -- 创建用户的最基本语句,需要用户名和密码
     -- 其他属性采用的都是默认值
     create user vip identified by vip;
    
    
     -- 再一个稍微复杂一点的创建语句
     create user vip
       identified by vip
       default tablespace users
       temporary temporary temp
       quota unlimited on users
       password expire;
    
    
     -- 在实际环境中,一个良好的习惯是:
     -- 为我们新建的用户创建独立的表空间
     create tablespace db_vip
       datafile 'd:/db_vip.dbf'
       size 50m;
    
     create user vip
       identified by vip
       default tablespace db_vip
       quota unlimited on db_vip
       password expire;
    
    
     -- 如果想对用户做一些限制
     -- 需要为它创建相应的资源文件
     create profile vip_profile limit
       failed_login_attempts 3
       password_life_time    unlimited
       sessions_per_user     2;
    
    -- 将资源文件分配给用户,也可以在创建用户的时候指定
     alter user profile vip_profile;
    

    5.2 权限(Privilege)

    权限指的是执行特定命令或访问数据库对象的权利,分为系统权限和对象权限。

    -- 授权
    -- with admin option 可以允许获得权限的用户可以将这个权限继续授予别人
    GRANT 权限 [ON 对象] TO 谁 [WITH ADMIN OPTION];
    
    -- 撤销授权
    REVOKE 权限 FROM 谁;
    
    -- 创建角色
    CREATE ROLE 角色名;
    

    操作示例:

    -- 对象权限有 select/insert/update/delete/alter/execute 等
    -- 系统中所有的系统权限和角色保存在相关字典表中:
    select * from system_privilege_map;  -- 列出系统中所有的系统权限
    select * from dba_role;              -- 列出系统中所有的角色
    
    
    -- 查看已授予的权限
    select * from dba_sys_privs where grantee='VIP';
    select * from dba_tab_privs where grantee='VIP';
    select * from dba_role_privs where grantee='VIP';
    
    
    --- 关于权限的管理
    -- 新建用户先
    create user vip identified by vip quota 1m on users;
    -- 新用户什么都干不了,甚至不能登录,如果想让它可以登录,给它一个相应权限:
    grant create session to vip;
    -- 现在可以登录 vip 了。但是不能创建表,需要我们给一个相应权限:
    grant create table to vip;
    -- 现在,可以创建表了
    create table aaa (i int);
    insert into aaa values (888);
    commit;
    -- 上面创建用户、授权的语句可以缩写为:
    grant create session, create table to vip identified vip quota 1m on user;
    -- 自己创建的表,自己会有完全的操作权力,但如果想要看别的用户的表,需要授权:
    grant select on scott.emp to vip;
    -- 上面就有了查询的权限。但不能修改。如果要修改,需要相应权限。当然,如果想把对象上的所有权力一并授予,需要用到 All:
    grant all on scott.emp to vip;
    -- 通过下面语句,可以看到对象权限的授予情况:
    select * from dba_tab_privs where grantee='VIP';
    

    角色是权限的命名集合,它可以简化授权。

    -- 创建角色
    create role myrole;
    -- 将权限赋予角色
    grant create session, create table to myrole;
    grant create view to myrole;
    -- 甚至可以将另一个角色赋予我们的角色
    grant resource to myrole;
    -- 使用角色
    grant myrole to vip;
    grant myrole to vip with admin option;
    -- 删除角色
    drop role myrole;
    

    [Oracle 预定义角色] Oracle 自带了很多角色,常用的有:

    1. CONNECT,只包含了 create session 等权限,即登录系统的权限
      select * from dba_sys_privs where grantee='CONNECT';
      
    2. RESOURCE,包含了若干 create xxx 权限,即创建对象、创建资源的权限
      select * from dba_sys_privs where grantee=RESOURCE';
      
    3. DBA,包含了200多个系统权限,是用来进行系统管理的角色
      grant connect, resource to A_Common_User;
      grant dba to A_Super_User;
      

    [特殊的 PUBLIC 角色] 公用角色,默认是授予每个用户的。

    grant connect to public;  -- 这样,不需要进行任何其他操作,所有新建的用户就都拥有登录的功能了。
    

    [最小权限原则] 我们开发的时候,为了方便,经常要做这样的操作:

    grant dba to xxx identified by yyy;  -- 创建一个用户 xxx,密码为 yyy,授予 dba 角色
    

    但这权力太大,在正式环境中,这样的授权是非常不合适的。一般要遵守 最小权限原则, 也就是:

    创建一个用户,授予能完成任务的尽量少的权限,多一个也不好。
    

    比如,我们有客户需要查看 vip 用户下的 student 表,我们需要创建一个用户给他:

    -- 第一步,为客户需求创建一个用户
    create user guest identified by ***;
    
    -- 第二步,授予连接数据库的权限
    grant connect to guest;
    
    -- 第三步,授予 vip.student 的 select 权限
    grant select on vip.student to guest;
    
    
    -- 当然,上面可以再简化为以下。That's All.
    grant connect to guest identified by ***;
    grant select on vip.student to guest;
  • 相关阅读:
    Python下载安装
    批量修改样式及全选反选
    小99
    练习题
    练习
    对象、函数
    操作document对象练习
    练习题
    0513-2
    0513-1
  • 原文地址:https://www.cnblogs.com/qq895139140/p/7456786.html
Copyright © 2011-2022 走看看