Oracle+11g+笔记(6)-数据库用户管理

打印 上一主题 下一主题

主题 840|帖子 840|积分 2520

Oracle+11g+笔记(6)-数据库用户管理

6、数据库用户管理

6.1 权限授予

6.1.1 直接授权

直接授权是指通过GRANT语句直接把权限授予用户,包括体系权限的授权和对象权限的授权两种情况。
6.1.1.1 体系权限的授权

在创建用户后,假如没有给用户授予相应的体系权限,则用户不能连接到数据库,因为该用户缺少创建会话的权
限。
在数据库中要进行某一种操作时,用户必须具有相应的体系权限,体系权限是由数据库管理员为用户授予的。向用
户授予权限语句为GRANT,其语法格式为:
  1. GRANT 系统权限 TO {PUBLIC|role|usemame}[WITH ADMIN OPTION]
复制代码
提示:在为用户授权时,可以使用WITH ADMIN OPTION选项,表示该用户可以将其所有权再授予其他用户,并且
该用户还可以将授予的权限再回收。
在Oracle数据库中,用户SYSTEM、SYS是数据库管理员,它具有DBA所有体系权限,包括
SELECT ANY DICTIONARY权限,以是SYSTEM和SYS用户可以查询数据字典中以DBA开头的数据字典视图、创建
数据库布局等。
在Oracle 11g中有206个体系权限。可以在数据字典表SYSTEM_PRIVILEGE_MAP中看到所有这些权限,用
SELECT语句可以查询这些权限。
  1. SELECT * FROM SYSTEM_PRIVILEGE_MAP;
  2. PRIVILEGE|NAME                          |PROPERTY|
  3. ---------+------------------------------+--------+
  4.        -3|ALTER SYSTEM                  |       0|
  5.        -4|AUDIT SYSTEM                  |       0|
  6.        -5|CREATE SESSION                |       0|
  7.        -6|ALTER SESSION                 |       0|
  8.        -7|RESTRICTED SESSION            |       0|
  9.       -10|CREATE TABLESPACE             |       0|
  10.       -11|ALTER TABLESPACE              |       0|
  11.       -12|MANAGE TABLESPACE             |       0|
  12.       -13|DROP TABLESPACE               |       0|
  13.       -15|UNLIMITED TABLESPACE          |       0|
  14.       -20|CREATE USER                   |       0|
  15.       -21|BECOME USER                   |       0|
  16.       -22|ALTER USER                    |       0|
  17.       -23|DROP USER                     |       0|
  18.       -30|CREATE ROLLBACK SEGMENT       |       0|
  19. ......
复制代码
  1. SELECT count(*) FROM SYSTEM_PRIVILEGE_MAP;
  2. COUNT(*)|
  3. --------+
  4.      208|
复制代码
提示:体系权限中有一种ANY权限,具有ANY权限的用户可以在任何用户模式中进行操作。
体系权限可以划分为聚集权限、数据库权限、索引权限、过程权限、概要文件权限、角色权限、回退段权限、序列
权限、会话权限、同义词权限、表权限、表空间权限、用户权限、视图权限、触发器权限、专用权限、其他权限
等。




  1. connect sys/sysroot as sysdba;
  2. create user User1 identified by 123456;
  3. GRANT sysdba to User1;
  4. connect User1/123456 as sysdba;
复制代码
  1. connect sys/sysroot as sysdba;
  2. SQL> create user User2 identified by 123456
  3.   2  DEFAULT TABLESPACE users
  4.   3  TOMPORARY TABLESPACE temp;
  5. GRANT create session to User2;
复制代码
6.1.1.2 对象权限的授予

对象权限是用户之间的表、视图、序列等模式对象的相互存取操作的权限。对属于某一用户模式的所有模式对象,
该用户对这些模式对象具有全部的对象权限,也就是说,模式的拥有者对模式中的对象具有全部对象权限。同时,
模式的拥有者还可以将这些对象权限授予其他用户。
按照差别的对象类型,Oracle数据库中设置了差别种类的对象权限。对象权限及对象之间的对应关系如表所示。

对象权限由该对象的拥有者为其他用户授权,非对象的拥有者不得为对象授权,将对象权限授出后,获权用户可以
对对象进行相应的操作,没有授予的权限不得操作。对象权限被授出后,对象的拥有者属性不会改变,存储属性也
不会改变。
使用GRANT语句可以将对象权限授予指定的用户、角色、PUBLIC公共用户组,其语法格式如下:
  1. GRANT [object_privilege|ALL[PRIVILEGES]ON[schema.]object TO{user|role|PUBLIC}
复制代码
其中,对象权限是上表中某一类对象的相应权限,多个权限之间用逗号隔开,多个用户名之间也用逗号隔开,角色
表示数据库中已创建的角色。PUBLIC 表示将该对象权限授予数据库中全体用户。
一个用户没有其他用户的对象权限,以是不能访问其他用户的对象。但是,假如把另外一个用户的某种对象权限授
予该用户,该用户就具备了相应的访问对象的权限。
  1. SQL>CONNECT hr/hrroot
  2. SQL>GRANT select,insert,update ON employees TO User2;
  3. SQL>CONNECT User2/123456;
  4. SQL>SELECT FIRST_NAME,LAST_NAME,JOB_ID,SALARY FROM hr.employees where salary>15000;
复制代码
  1. SQL> SELECT FIRST_NAME,LAST_NAME,JOB_ID,SALARY FROM hr.employees where salary>15000;
  2. FIRST_NAME           LAST_NAME                 JOB_ID         SALARY
  3. -------------------- ------------------------- ---------- ----------
  4. Steven               King                      AD_PRES         24000
  5. Neena                Kochhar                   AD_VP           17000
  6. Lex                  De Haan                   AD_VP           17000
复制代码
6.1.2 授权角色

可以使用角色为用户授权,同样也可以从用户中回收角色。由于角色聚集了多种权限,以是当为用户授予角色时,
相当于为用户授予了多种权限。如许就避免了向用户逐一授权,从而简化了用户权限的管理。
在为用户授予角色时,既可以向用户授予体系预定义的角色,也可以本身创建角色,然后再授予用户。在创建角色
时,可以为角色设置应用安全性。角色的应用安全性是通过为角色设置密码进行掩护的,只有提供正确的密码才能
允许修改或设置角色。
提示:权限、角色不但可以被授予用户,也可以被授予用户组(public)。当将权限或角色授予public之后,会使得
所有用户都具有该权限或角色。
通过查询数据字典DBA_ROLES可以了解数据库中全部的角色信息,其查询语句如下:
  1. SELECT * FROM dba_roles;
复制代码
  1. ROLE                       |PASSWORD_REQUIRED|AUTHENTICATION_TYPE|
  2. ---------------------------+-----------------+-------------------+
  3. CONNECT                    |NO               |NONE               |
  4. RESOURCE                   |NO               |NONE               |
  5. DBA                        |NO               |NONE               |
  6. SELECT_CATALOG_ROLE        |NO               |NONE               |
  7. EXECUTE_CATALOG_ROLE       |NO               |NONE               |
  8. DELETE_CATALOG_ROLE        |NO               |NONE               |
  9. EXP_FULL_DATABASE          |NO               |NONE               |
  10. IMP_FULL_DATABASE          |NO               |NONE               |
  11. LOGSTDBY_ADMINISTRATOR     |NO               |NONE               |
  12. DBFS_ROLE                  |NO               |NONE               |
  13. AQ_ADMINISTRATOR_ROLE      |NO               |NONE               |
复制代码
DBA角色拥有所有体系级权限。通常,角色CONNECT、RESOURCE 和 DBA主要用于数据库管理。对于数据库管理
员需要分别授予CONNECT、RESOURCE和DBA角色。对于数据库开发用户需要分别授予CONNECT和RESOURCE角
色。
假如体系预定义的角色不符适用户的需要,数据库管理员还可以创建更多的角色。
创建角色的用户必须具有CREATE ROLE体系权限。
在角色刚刚创建时,它并不具有任何权限,这时的角色是没有用处的。因此,在创建角色后,通常还需要立即为它
授予权限。
  1. create role access_database;
  2. GRANT create session,create table,create view to access_database;
  3. GRANT access_database to User1;
复制代码
注意:在一个GRANT语句中,可以同时为用户授予体系权限和角色,但不能同时授予对象权限和角色。
在创建角色时也可以为角色指定密码,带有密码的角色在修改时,必须提供密码,否则体系将拒绝对角色的修改,
  1. CREATE role manager identified by 123456;
  2. GRANT create session,create table to manager;
复制代码
Oracle 数据库中,数据库管理员通常通过角色来管理体系权限,即将角色授予用户,而不是直接为用户授予体系
权限。在现实的应用中,可以将用户分组,同组用户使用同一角色,如许他们的权限就雷同,当需要为用户增长或
镌汰权限时,只要为角色增长或镌汰权限即可。
将角色授予用户后,角色信息被存储在用户数据字典USER_ROLE_PRIVS中,通过查询该数据字典可以了解用户自
己所具有的角色:
  1. select username,granted_role,admin_option from user_role_privs;
复制代码
  1. SQL> select username,granted_role,admin_option from user_role_privs;
  2. USERNAME                       GRANTED_ROLE                   ADM------------------------------ ------------------------------ ---HR                             PLUSTRACE                      NOHR                             RESOURCE                       NO
复制代码
查看角色拥有的权限:
  1. select * from role_sys_privs where role='ACCESS_DATABASE'   
复制代码
  1. ROLE           |PRIVILEGE     |ADMIN_OPTION|
  2. ---------------+--------------+------------+
  3. ACCESS_DATABASE|CREATE TABLE  |NO          |
  4. ACCESS_DATABASE|CREATE VIEW   |NO          |
  5. ACCESS_DATABASE|CREATE SESSION|NO          |
复制代码
6.1.3 使用 ALTER USER 语句修改用户的默认角色

默认角色是当用户登录到数据库时由Oracle主动启用的一种角色。当某一角色被授予用户后,该角色即成为该用
户的默认角色。可以使用ALTER USER语句来修改用户的默认角色。语法格式如下:
  1. ALTER USER useuname [default role[role_name[,role_name,...]] | all [except role_name[,
  2. role_name,...]] | none];
复制代码
其中,default role表示默认角色;使用关键字all可以设置该用户的所有角色;使用except则可以设置某角
色外其他所有角色生效;none则设置所有角色为失效状态。
1、设置用户角色失效
要使用户的角色失效,可以使用ALTER USER USER_NAME DEFAULT ROLE NONE 语句。
  1. connect sys/sysroot as sysdba;
  2. alter user user1 default role none;
复制代码
用户的角色失效后,该用户角色中的权限将全部丢失。用户连接数据库权限CREATE SESSION存储于ACCESS
DATABASE中,当该角色失效后,用户user1将不能再登录到数据库中。
2、设置用户角色生效
用户的默认角色失效后,可以重新设置为生效。设置为生效后,用户的相应权限又可以再次被使用。修改用户的角
色生效语句如下:
  1. ALTER USER USER_NAME DEFAULT ROLE ALL
复制代码
  1. ALTER USER user1 DEFAULT ROLE ALL
复制代码
提示:使用ALTER USER USER_NAME DEFAULT ROLE ALL
EXCEPT命令,可以启用除某个角色之外的其他所有角
色。
6.1.4 使用SET ROLE控制角色使用

可以为数据库用户的会话启用或禁用角色。假如数据库管理员没有为用户取消所有默认角色,则该用户的会话将启
用所有已经授予的角色。可以通过查询数据字典视图SESSION_ROLES,查看当前数据库会话启用了哪些角色。
可以使用SET_ROLE语句控制角色失效或生效。SET ROLE 语句的语法为:
  1. SET ROLE[role [identified by password][,role[identified by password]...]|ALL[EXCET role[,
  2. role]] | NONE];
复制代码
其中,使用带ALL选项的SET ROLE语句时,将启用用户被授予的所有角色,使用ALL 选项有一个前提条件是该用
户的所有角色不得设置密码。EXCEPT ROLE表示除指定的角色外,启用其他全部角。NONE表示使用户的所有角色
失效。
【演示启用/禁用角色】
  1. # step1 使user1用户没有默认角色connect sys/sysroot as sysdba;
  2. alter user user1 default role none;
  3. grant connect,resource to user1;alter user user1 default role connect,resource;select GRANTED_ROLE,ADMIN_OPTION,DEFAULT_ROLE from dba_role_privs where GRANTEE = 'USER1';
复制代码
  1. GRANTED_ROLE   |ADMIN_OPTION|DEFAULT_ROLE|
  2. ---------------+------------+------------+
  3. ACCESS_DATABASE|NO          |NO          |
  4. CONNECT        |NO          |YES         |
  5. RESOURCE       |NO          |YES         |
复制代码
  1. # step2 以用户user1登录到数据库,查看SESSION ROLES视图确认会话所用的角色
  2. connect user1/123456;
  3. select * from session_roles;
  4. ROLE|
  5. -----------+
  6. CONNECT
  7. RESOURCE
复制代码
可以看出,ACCESS DATABASE角色已不再有效,用户当前的会话只启用了CONNECT和 RESOURCE角色。
  1. # step3 为当前数据库会话启用ACCESS DATABASE角色
  2. connect user1/123456;
  3. set role access_database;
  4. select * from session_roles;
  5. ROLE
  6. ------------------------------
  7. ACCESS_DATABASE
复制代码
可以看出,SETROLE强制当前会话使用ACCESS DATABASE角色。
  1. # step SET ROLE NONE语句强制当前会话禁用所有角色,这样当前用户的会话将失去所有权限
  2. conn user1/123456;
  3. set role none;
  4. select * from session_roles;
  5. ------------------------------
  6. 未选定行
  7. create table temp (id number,name varchar2(20)) tablespace USERS;
  8. ------------------------------
  9. 第1行出现错误:
  10. ORA-01031:权限不足
复制代码
6.2 回收权限

当用户不使用某些权限时,就尽量收回权限,只保留其最小权限。包括回收权限、撤销角色、删除数据库对象和删
除用户。
6.2.1 逐一回收

假如用户的某一权限不使用时,可以使用REVOKE语句逐一回收的方式收回权限。
1、体系权限的回收
数据库管理员或者具备向其他用户授权的用户都可以使用REVOKE语句将授予的权限回收。REVOKE语句格式如
下:
  1. REVOKE 系统权限 FROM  {PUBLIC|role|usemame}
复制代码
  1. CONNECT sys/sysroot AS sysdba
  2. REVOKE select any dictionary FROM scott;
复制代码
用户的体系权限被回收后,相应的权限传递同时被回收。在回收体系权限时,经过传递获得的权限的用户不受影
响。
2、对象权限的回收
对象的拥有者可以将授出的权限收回,回收对象权限可以使用REVOKE语句,使用该语句回收对象权限的语法如
下:
  1. REVOKE { object-privilege | ALL [PRIVILEGES]} ON [schema.]object FROM{user|role|
  2. PUBLIC};
复制代码
回收对象权限时,授权者只能从本身授权的用户那里回收对象权限。假如被授权用户基于一个对象权限创建了过
程、视图,那么当回收该对象权限后,这些过程、视图将变为无效。
  1. CONNECT hr/hrroot
  2. REVOKE select on employees from user1;
复制代码
  1. CONNECT hr/hrroot
  2. REVOKE all on employees from public;
复制代码
在回收对象权限时,经过传递获得权限的用户会受到影响。
6.2.2 删除角色

假如不再需要某个角色或者某个角色的设置不太合理时,就可以使用DROP ROLE来删除角色,使用该角色的用户
的权限同时也被回收。
  1. conn sys/sysroot
  2. DROP ROLE access_database;
复制代码
6.2.3 删除数据库对象

Oracle数据库对象中最根本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器、索引等。删除
数据库对象后,也就删除了用户或角色对该数据库对象的访问权限。
删除数据库表使用DROP TABLE命令,其语法格式为:
  1. DROP TABLE[schema.]table_name[CASCADE CONSTRAINTS];
复制代码
删除表后,表上的索引、触发器、权限、完备性约束也同时被删除。假如删除的表涉及引用主键或唯一关键字的完
整性约束时,那么DROP TABLE语句就必须包罗CASCADE CONSTRAINTS子串。
视图是一个或多个表中的数据的简化描述,用户可以将视图看成一个存储查询或一个虚拟表。删除视图使用
DROP VIEW命令,其语法格式为:
  1. DROP VIEW view_name;
复制代码
需要注意的是,将视图定义从数据字典中删除,基于视图的权限也同时被删除,其他涉及到该视图的函数、视图、
步伐等都将被视为非法。
6.2.4 删除用户

当删除一个用户时,体系会将该用户账号以及用户模式的信息从数据字典中删除。用户被删除后,用户创建的所有
数据库对象也被全部删除。删除用户可以使用DROP USER语句。
假如用户当前正连接到数据库,则不能删除该用户,必须比及该用户退出体系后再删除。假如要删除的用户模式中
包罗有模式对象,则必须在DROP USER 语句中带上CASCADE 关键字,那么就会在删除用户时也将该用户创建的模
式对象全部删除。
  1. CONNECT sys/sysroot
  2. DROP USER user2;
复制代码
6.3 差别用户权限管理

Oracle数据库体系中的用户包括最终用户(即连接、登录和操作数据库的人员)、应用步伐开发人员(使用Oracle
数据库进行应用步伐开发的人员)、数据库管理员(DBA)等,其中最高的权限属于SYSDBA。
SYSDBA具有控制Oracle齐备行为的特权,如创建、启动、关闭、恢复数据库等。使数据库归档/非归档,备份表
空间等关键性的动作只能通过具有SYSDBA权限的用户来实验。这些任务纵然是平常DBA角色也不行。
一般对SYSDBA的管理有操作体系认证和密码文件认证两种方式。详细选择哪一种认证方式取决于:是在 Oracle
运行的呆板上维护数据库,还是在一台呆板上管理分布于差别呆板上的所有的Oracle 数据库。若选择在本机维护
数据库,则选择操作体系认证;如有许多数据库想进行会集管理,则可以选择密码文件认证方式。
6.4 管理对数据库对象的访问

Oracle 实现对数据库对象的访问管理,包括使用用户口令、使用权限控制、使用存储过程控制、使用数据库链
接、使用设置文件等。
6.4.1 使用用户口令

  1. CONNECT sys/sysroot as sysdba;
  2. CREATE USER user1 IDENTIFIED BY teacher;;
  3. connect user1/teacher;
复制代码
6.4.2 使用权限控制

为了实验根本的数据库操作,应该给数据库管理员授予管理权限。这些管理权限是通过两个专用的体系权限来授予
的,即SYSDBA和SYSOPER 根据所需的授权级别,授予一个管理权限。Oracle 数据库也可以使用权限控制用户对
数据库的操作,保证数据库的安全性。包括使用体系权限和管理权限来进行控制。
6.4.3 使用数据库链接

数据库链接(Database Link)是在分布式情况下,为了访问远程数据库而创建的数据通信链路。数据库链接隐蔽了
对远程数据库访问的复杂性。通常将正在登录的数据库称为本地数据库,另外一个数据库称为远程数据库。有了数
据库链接,便可以直接通过数据库链接来访问远程数据库的表。常见的形式是访问远程数据库固定用户的链接,即
链接到指定的用户,创建该形式的数据库链接的语法格式如下:
  1. CREATE DATABASE LINK link_name CONNECT TO user IDENTIFIED BY password USING
  2. 'server_name';
复制代码


  • link_name:表示要链接的远程数据库名。
  • user与password:分别表示账户及对应的账户密码。
  • server name:远程数据库服务名。
创建数据库链接时,所要连接数据库的用户应具有CREATE DATABASE LINK体系权限。数据库链接一旦建立并测
试成功,就可以使用表名@数据库链接名的形式来访问远程用户的表。
6.4.4 使用设置文件

用户设置文件是Oracle安全计谋的重要构成部分,利用用户设置文件可以对数据库用户进行根本的资源限制,并
且可以对用户的密码进行管理。
在安装数据库时,Oracle会主动建立名为DEFAULT的默认资源文件。假如没有为新创建的用户指定设置文件,
Oracle将会主动为它指定DEFAULT资源文件。另外,假如用户在自定义的资源文件中没有指定某项参数,Oracle
也会使用 DEFAULT 资源文件中相应参数设置作为默认值。
1、利用用户设置文件
利用用户设置文件,可以对体系资源进行限制,其详细介绍如表所示。

2、密码限制次数
用户设置文件除了可以用于资源管理外,还可以对用户的密码计谋进行控制。使用设置文件可以实现账户的锁定、
密码的过期时间、密码的复杂度三种密码管理。
在资源设置文件中,对用户密码的限制参数如表所示。

3、管理用户设置文件
用户设置文件现实上是对用户使用的资源进行限制的参数集。一般来说,为了有效地节省体系硬件资源,在设置配
置文件中的限制参数时,通常会设置SESSION_PER_USER和IDLE_TIME,以防止多个用户使用同一个用户账号连
接,并限制会话的空闲时间,而对于其他限制参数则不进行设置。

别的,还可以通过查询数据字典的DBA_PROFILES视图来查看设置文件信息。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表