Oracle基础(二):用户及权限管理

时间:2022-10-10 19:00:12

一、创建用户 (一)简单创建 1、权限:只有DBA用户才有权限,或有create user 的系统权限 2、语法:
  • create user 用户名 identified by 密码;
  • oracle密码不能以数字打头
3、实例:用户名-sam_sho、密码-sam123
  • create user  sam_sho identified by sam123;
4、注意:1)刚创建的用户没有任何权限, 需要管理员分配权限。如登录权限:
  • grant create session to sam_sho ;        --分配登录权限
  • create session:登录权限。
2)oracle的权限较为复杂,下面单独处理。

(二)复杂创建1、实例
  • create usersam_shoidentified by sam123 
  • default tablespace users                      --默认表空间。users是oracle自己创建的表空间
  • temporary tablespace temp                 --临时表空间
  • quota 3m on users ;                          --分配表空间大小,3m。unlimited-不限制大小
  • grant create session to sam_sho ;        --分配登录权限
  • grant dba to sam_sho ;                       --分配DBA 角色
  • grant select on V_table to sam_sho ;   --分配查询表的权限
2、表空间理解1)表存在的空间,即在逻辑上表(Table)都是存放在表空间中(Tablespace )2)一个表空间指向具体的数据文件
Oracle基础(二):用户及权限管理

3)resourse 角色的用户,创建的表没有表空间限制。
  • grant resourse to sam_sho ;   --分配resourse  角色
(三)Oracle的用户管理机制1、一些概念:
  • oracle dbms:数据库管理系统
  • db 实例:
  • 表空间
  • 数据对象
  • 用户
  • 权限:系统权限与数据库权限。
  • 角色:把常用的权限集中起来。
2、权限、角色、用户的关系

Oracle基础(二):用户及权限管理


二、登录及修改密码(一)用户登录1、切换用户,用户登录。1)语法:
  • conn 用户名/密码 【as sysdba/sysoper
2)实例:
  • conn sam_sho/sam123;
  • conn sam_sho/sam123 as sysdba;
    • 实际登录的不是sam_sho,可以show user看看
    • 和验证机制有关,见下面。
2、显示当前登录用户的名称1)语法:
  • show user;

(二)修改密码1、给用户修改密码1)语法:
  • passw【ord】  用户名
2)实例:
  • passw sam_sho;
  • passw  
3)注意:
  • 给自己修改,不需要带用户名,给别人修改需要带上。
2、给别人修改密码1)权限:需要DBA的权限,或者拥有alter user 的系统权限2)语法:
  • alter user 用户名 identified by 新密码;
3)实例:
  • alter user sam_sho identified by sam456;
(三)删除用户1、权限:一般需要DBA的权限,或者需要具有drop user的权限2、语法:
  • 语法:drop user 用户名 (cascade)
  • cascade 参数:级联删除该用户创建的表等数据对象。数据库会提醒的。
3、实例:
  • drop user sam_sho ;
  • drop user sam_sho cascade;--级联删除用户创建的表等数据
4、删除某个用户,但保留其数据对象
  • 方案:锁定该用户
    • alter user 用户 account lock;
    • alter user 用户 account unlock;--解锁

三、用户口令
1、概述:
  • 需要DBA身份
  • profile 是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default 的profile。
  • 当建立用户没有指定 profile  选项,那么oracle 就会将default  分配给用户。
2、账户锁定
  • 概述:指定该账户登录时最多可以输入密码的次数,也可以指定用户锁定的时间(天),一般用dba 的身份去执行该命令。
  • 实例:指定 这个用户最多只能尝试3次登录,锁定时间为2天。
    • create profile lock_account limit failed_login_attempts password_lock_time 2;
    • alter user sam123 profile lock_account ;--分配
Oracle基础(二):用户及权限管理

3、账户解锁:
  • 语法:
    • alter user 用户名 account unlock;
  • 实例:
    • alter user sam123 account unlock;
Oracle基础(二):用户及权限管理

4、终止口令
  • 概述:为了让用户定期修改密码可以使用终止口令来完成
  • 实例:建立新的profile ,要求该用户每隔10天要修改自家的登录密码,宽限期为2天。
    • create profile myProfile limit password_life_time 10 password_grace_time 2;
    • alter user sam123 profile myProfile;
5、历史口令:新旧密码不能重复
  • create profile myProfile2 limit password_life_time 10 password_grace_time password_reuse_time 1
  • alter user sam123 profile myProfile2;
6、删除口令
  • drop profile myProfile2 ;

四、权限与角色(一)、概述:
1、刚创建的用户没有任何权限(不能登录),需要赋予各种权限。oracle对于权限的管理,需要引用角色的概念。2、权限1)系统权限:用户对数据库管理的操作以及对数据对象本身的操作的权限。
  • 包括建库、建表、建索引、登录数据库、修改密码等等
2)对象权限:用户对其他用户的数据对象数据操作的权限。
  • 权限主要分为:select、insert、update、delete、all、create index 等等
3、角色:简化对权限的管理。1)预定义角色
  • connect :连接的角色
  • DBA:管理员角色
  • resource:这个角色可以在任何表空间中建表。
2)自定义角色
4、查看权限、角色
  • 通过PL/SQL DEV工具查看
  • 通过各种指令
5、权限分配的方式
  • 直接分配权限
    • 系统权限(与数据库管理相关):
      • grant create sessionto sam_sho ;--分配登录权限
    • 对象权限(增删改查):
      • grantselectonV_tableto sam_sho ;--分配查询表的权限
  • 分配角色,批量分配权限
    • grantdbato sam_sho ;--分配DBA 角色
6、撤销权限
  • 语法:revoke 权限 from 用户
  • 实例:
    • revoke select on emp from sam_sho; 从sam_sho收回emp表的查询权限
    • revoke connect from sam_sho;

(二)权限1、系统权限:是指执行特定类型sql命令的权限,它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有 create table 权限时,可以在其方案中建表。当用户具有 create any table 权限时,可以再任何方案中建表。1)内容
  • create session 连接数据库
  • create table 建表
  • create view 建视图
  • create public synonym 建同义词
  • create procedure 建过程、函数、包
  • create trigger 触发器
  • create cluster 建簇
  • create sequence 建索引
  • create type 
2)显示:
  • oracle 提供了166系统权限,查询数据字典视图 system_privilege_map
  • select * from system_privilege_map order by name;--查询系统权限
3)赋予系统权限:grant 
  • 一般情况下只有DBA才能完成 或者拥有 grant any privilege 权限
  • 赋权限语句后+ with admin option  ,实现系统权限的传递(和方案一起理解)
    • grant connect to sam_sho with admin option
4)权限回收:revoke
  • 不是级联回收。
2、对象权限:访问其他方案对象的权利。用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。1)内容:
  • alter 修改
  • delete 删除
  • select 查询
  • insert 添加
  • update 修改
  • index 索引
  • references 引用
  • execute 执行
2)显示:DBA用户可以查看对象权限 dba_tab_privs
  • select distinct privilege from dba_tab_privs;
3)赋予对象权限
  • 直接可以赋权限给用户 或者角色
  • 赋权限语句后+ with grant option  ,实现系统权限的传递
    • grant select on emp to sam_sho with grant option
    • 只能赋予用户,不能赋予角色
4)权限回收:revoke
  • 是级联回收。
(三)角色1、预定义角色:33种1)常见内容
  • connect :连接的角色
  • DBA:管理员角色(sys 和 system)。不具备启动和关闭数据库
  • resource:这个角色可以在任何表空间中建表。
    • 隐藏了 unlimited tablespace 的权限
2)显示
  • 查看预定义角色:33种角色
    • select * from dba_roles;
  • 查看角色的系统权限
    • SELECT * FROM dba_sys_privs where grantee = 'DBA'
    • SELECT * FROM role_sys_privs WHERE role = 'DBA';
  • 查看角色的对象权限
    • SELECT * FROM dba_tab_privs where grantee = 'DBA'
  • 查看某个用户的角色
    • SELECT * FROM dba_role_privs WHERE grantee='SYS';
2、自定义角色1)创建角色
  • 注意:
    • BDA角色创建或者 需要具有create role 权限
    • 在建立角色的时候,可以设置验证方式,如不验证、数据库验证等
  • 不验证建立(一般都是这种)
    • create role 角色名 not identified
  • 数据库验证
    • create role 角色名 identified by 密码;
2)给角色赋权限
  • grant create session to 角色
3)实例
  • create role myRole not identified;
  • grant create session to myRole ;
  • grant select on scott.emp to myRole ;
  • grant myRole  to sam_sho;
3、删除角色
  • drop role 角色名;
(四)给用户赋权限1、赋予直接的权限。如直接登录权限(create session)
  • grant create session to sam_sho;
  • grant select on emp to sam_sho;
2、直接分配角色,批量分配权限。如
  • grant connect to sam_sho;
    • 授于sam_sho connect的角色,即拥有登录的权限。connect,包含7 种权限。
  • grant resource to sam_sho;
(五)用户的权限操作1、赋权限:grant  1)语法:grant  权限(角色) to 用户名;
2)实例1:
  • grant create table to sam_sho:赋予 sam_sho 创建表的权限。
  • grant dba to sam_sho:赋予 sam_sho dba的角色,其自然具有创建表的角色。
3)实例2
  • grant select on emp to sam_sho; 把emp表的查询权限赋予sam_sho
  • SELECT * FROM scott.emp;可以查询,但是需要在表前面加上scott前缀。
2、收回权限:revoke1)语法:
  • revoke select on emp from sam_sho; 从sam_sho收回emp表的查询权限
2)注意:
  • 谁授权,谁收回。或者DBA
  • 系统权限,不是级联回收。
  • 对象权限,是级联回收。
3、权限的传递1)scott把emp表的查询权限赋予sam_sho,sam_sho再把这种权限传递给rabby_zho2)语法:
  • 对象权限使用 with grant option 进行传递
    • grant select on emp to sam_sho with grant option;(scott登录)
    • grant select on scott.emp to rabby_zho;(sam_sho登录)
  • 角色、系统权限使用 with admin option
    • grant connect to sam_sho with admin option;(scott登录)
    • grant connect to rabby_zho;
3)回收
  • 系统权限,不是级联回收。
  • 对象权限,是级联回收。

五、方案(Schema)1、问题:同一个数据库实例 DEV_SAM,创建了2个用户 A 和 B 。用户 A 创建表a_table,B创建表b_table。结果A 访问不了 b_table,B访问不了 a_table 。2、解决:
  • 当一个用户,创建好后,如果该用户创建了任意一个数据对象,这时,dbms就会创建一个对应的【方案】与该用户对应,并且该【方案】的名字与用户名一致。
  • 在这样的机制下,同一个数据库实例,可以创建多张相同表名的表,但是同一个方案中表名是具有唯一性的。
  • A 如果需要去访问 B方案下的数据,需要权限的转移。
    • 语法: 
      • grant 权限 to 用户名 【with grant option】 对象权限
      • grant 权限 to 用户名 【with admin option】系统权限
    • 实例
      • grant select on emp to sam_sho ;(scott登录)
        • 使用的时候,需要带【方案】名:select * from scott.emp 。
      • grant all on emp to sam_sho with grant option;可以转移
        • grant select on scott.emp to sam2;
Oracle基础(二):用户及权限管理


六、数据库的启动流程(远程登录)(一)windows:1、lsnrctl start (启动监听)2、oradim  -startup -sid  数据库实例名
  • oradim  -startup -sid  orcl
3、附:查看windows系统的信息
  • systeminfo
(二)Linux1、lsnrctl start (启动监听)2、sqlplus sys/change_on_install as sysdba 
  • sqlplus /nolog
  • conn sys/change_on_install as sysdba 
3、startup

七、Oracle的登录认证方式(一)Windows1、oracle登录认证在windows 和linux 下是不完全相同。2、现象:1)conn XXXX/CCC as sysdba; 登录成功,并且显示当前用户为 sys。2)XXXX/CCC 可以任意,只要以 as sysdba 即可。
2、操作系统认证1)如果【当前用户】属于本地操作系统的 ora_dba 组,即可通过操作系统认证。2)当前用户,指目前操作系统使用的用户,可以简单通过windows 任务管理器查看。
Oracle基础(二):用户及权限管理

3)操作系统的用户与组:
  • 我的电脑-->右击管理-->本地用户和组-->用户,如用户 sam
Oracle基础(二):用户及权限管理
  • 我的电脑-->右击管理-->本地用户和组-->组,显示sam属于ora_dba组
Oracle基础(二):用户及权限管理

3、oracle 数据库验证(密码文件验证)1)对于普通用户:
  • oracle默认使用数据库验证。
2)对于特权用户(比如 sys 用户,或以 as sysdba)
  • oracle 默认使用操作系统认证,如果验证不通过,再到数据库验证。
  • 通过配置 NETWORK\ADMIN\sqlnet.ora 文件,可以修改oracle登录认证方式。
    • SQLNET.AUTHENTICATION_SERVICES= (NTS)  
      • NTS:基于系统,默认的。
      • NONE:基于Oracle 验证
      • NONE,NTS:二者都验证
Oracle基础(二):用户及权限管理
(二)Linux,略。
七、丢失 Oracle 管理员密码1、恢复办法:把原有密码文件删除,生成一个新的密码文件2、恢复步骤如下:1)搜索名为 PWD+数据库实例名.ora 文件。一般在\database\PWDorcl.ora2)删除该文件,建议备份。3)生成新的密码文件,在doc 下输入命令:
  • orapwd file = 原来密码文件的全路径\密码文件名.ora password=新密码 entries=10;
  • entries=10:允许几个特权用户
  • 密码文件名 一定要和原来的密码文件名一致。
4)重启生效
3、例子:
  • orapwd file=D:\oracle10g\database\PWDorcl.ora password=abc123 entries=10;

八、数据库管理员
Oracle基础(二):用户及权限管理


Oracle基础(二):用户及权限管理