反转基因福娃 发表于 2025-1-5 18:23:11

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

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

6、数据库用户管理

6.1 权限授予

6.1.1 直接授权

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

在创建用户后,假如没有给用户授予相应的体系权限,则用户不能连接到数据库,因为该用户缺少创建会话的权
限。
在数据库中要进行某一种操作时,用户必须具有相应的体系权限,体系权限是由数据库管理员为用户授予的。向用
户授予权限语句为GRANT,其语法格式为:
GRANT 系统权限 TO {PUBLIC|role|usemame}
提示:在为用户授权时,可以使用WITH ADMIN OPTION选项,表示该用户可以将其所有权再授予其他用户,并且
该用户还可以将授予的权限再回收。
在Oracle数据库中,用户SYSTEM、SYS是数据库管理员,它具有DBA所有体系权限,包括
SELECT ANY DICTIONARY权限,以是SYSTEM和SYS用户可以查询数据字典中以DBA开头的数据字典视图、创建
数据库布局等。
在Oracle 11g中有206个体系权限。可以在数据字典表SYSTEM_PRIVILEGE_MAP中看到所有这些权限,用
SELECT语句可以查询这些权限。
SELECT * FROM SYSTEM_PRIVILEGE_MAP;

PRIVILEGE|NAME                        |PROPERTY|
---------+------------------------------+--------+
       -3|ALTER SYSTEM                  |       0|
       -4|AUDIT SYSTEM                  |       0|
       -5|CREATE SESSION                |       0|
       -6|ALTER SESSION               |       0|
       -7|RESTRICTED SESSION            |       0|
      -10|CREATE TABLESPACE             |       0|
      -11|ALTER TABLESPACE            |       0|
      -12|MANAGE TABLESPACE             |       0|
      -13|DROP TABLESPACE               |       0|
      -15|UNLIMITED TABLESPACE          |       0|
      -20|CREATE USER                   |       0|
      -21|BECOME USER                   |       0|
      -22|ALTER USER                  |       0|
      -23|DROP USER                     |       0|
      -30|CREATE ROLLBACK SEGMENT       |       0|
......
SELECT count(*) FROM SYSTEM_PRIVILEGE_MAP;

COUNT(*)|
--------+
   208|
提示:体系权限中有一种ANY权限,具有ANY权限的用户可以在任何用户模式中进行操作。
体系权限可以划分为聚集权限、数据库权限、索引权限、过程权限、概要文件权限、角色权限、回退段权限、序列
权限、会话权限、同义词权限、表权限、表空间权限、用户权限、视图权限、触发器权限、专用权限、其他权限
等。
https://i-blog.csdnimg.cn/blog_migrate/9eb20db92dd129aca29f89083c2e0a94.png#pic_center
https://i-blog.csdnimg.cn/blog_migrate/fde138c043869a121b98c0d81f8a2ad7.png#pic_center
https://i-blog.csdnimg.cn/blog_migrate/fabd2dc783d30a93073c2b70dff44215.png#pic_center
https://i-blog.csdnimg.cn/blog_migrate/5d9429b981a7659ef0c9c240293027a9.png#pic_center
connect sys/sysroot as sysdba;
create user User1 identified by 123456;
GRANT sysdba to User1;
connect User1/123456 as sysdba;
connect sys/sysroot as sysdba;
SQL> create user User2 identified by 123456
2DEFAULT TABLESPACE users
3TOMPORARY TABLESPACE temp;
GRANT create session to User2;
6.1.1.2 对象权限的授予

对象权限是用户之间的表、视图、序列等模式对象的相互存取操作的权限。对属于某一用户模式的所有模式对象,
该用户对这些模式对象具有全部的对象权限,也就是说,模式的拥有者对模式中的对象具有全部对象权限。同时,
模式的拥有者还可以将这些对象权限授予其他用户。
按照差别的对象类型,Oracle数据库中设置了差别种类的对象权限。对象权限及对象之间的对应关系如表所示。
https://i-blog.csdnimg.cn/blog_migrate/2927c333ff7ad6a2b5e0a879693d8c0d.png#pic_center
对象权限由该对象的拥有者为其他用户授权,非对象的拥有者不得为对象授权,将对象权限授出后,获权用户可以
对对象进行相应的操作,没有授予的权限不得操作。对象权限被授出后,对象的拥有者属性不会改变,存储属性也
不会改变。
使用GRANT语句可以将对象权限授予指定的用户、角色、PUBLIC公共用户组,其语法格式如下:
GRANT ONobject TO{user|role|PUBLIC}
其中,对象权限是上表中某一类对象的相应权限,多个权限之间用逗号隔开,多个用户名之间也用逗号隔开,角色
表示数据库中已创建的角色。PUBLIC 表示将该对象权限授予数据库中全体用户。
一个用户没有其他用户的对象权限,以是不能访问其他用户的对象。但是,假如把另外一个用户的某种对象权限授
予该用户,该用户就具备了相应的访问对象的权限。
SQL>CONNECT hr/hrroot
SQL>GRANT select,insert,update ON employees TO User2;
SQL>CONNECT User2/123456;
SQL>SELECT FIRST_NAME,LAST_NAME,JOB_ID,SALARY FROM hr.employees where salary>15000;
SQL> SELECT FIRST_NAME,LAST_NAME,JOB_ID,SALARY FROM hr.employees where salary>15000;

FIRST_NAME         LAST_NAME               JOB_ID         SALARY
-------------------- ------------------------- ---------- ----------
Steven               King                      AD_PRES         24000
Neena                Kochhar                   AD_VP         17000
Lex                  De Haan                   AD_VP         17000
6.1.2 授权角色

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

默认角色是当用户登录到数据库时由Oracle主动启用的一种角色。当某一角色被授予用户后,该角色即成为该用
户的默认角色。可以使用ALTER USER语句来修改用户的默认角色。语法格式如下:
ALTER USER useuname ] | all [except role_name[,
role_name,...]] | none];
其中,default role表示默认角色;使用关键字all可以设置该用户的所有角色;使用except则可以设置某角
色外其他所有角色生效;none则设置所有角色为失效状态。
1、设置用户角色失效
要使用户的角色失效,可以使用ALTER USER USER_NAME DEFAULT ROLE NONE 语句。
connect sys/sysroot as sysdba;
alter user user1 default role none;
用户的角色失效后,该用户角色中的权限将全部丢失。用户连接数据库权限CREATE SESSION存储于ACCESS
DATABASE中,当该角色失效后,用户user1将不能再登录到数据库中。
2、设置用户角色生效
用户的默认角色失效后,可以重新设置为生效。设置为生效后,用户的相应权限又可以再次被使用。修改用户的角
色生效语句如下:
ALTER USER USER_NAME DEFAULT ROLE ALL
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 语句的语法为:
SET ROLE[,role...]|ALL[EXCET role[,
role]] | NONE];
其中,使用带ALL选项的SET ROLE语句时,将启用用户被授予的所有角色,使用ALL 选项有一个前提条件是该用
户的所有角色不得设置密码。EXCEPT ROLE表示除指定的角色外,启用其他全部角。NONE表示使用户的所有角色
失效。
【演示启用/禁用角色】
# step1 使user1用户没有默认角色connect sys/sysroot as sysdba;
alter user user1 default role none;
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'; GRANTED_ROLE   |ADMIN_OPTION|DEFAULT_ROLE|
---------------+------------+------------+
ACCESS_DATABASE|NO          |NO          |
CONNECT      |NO          |YES         |
RESOURCE       |NO          |YES         |
# step2 以用户user1登录到数据库,查看SESSION ROLES视图确认会话所用的角色
connect user1/123456;

select * from session_roles;

ROLE|
-----------+
CONNECT
RESOURCE
可以看出,ACCESS DATABASE角色已不再有效,用户当前的会话只启用了CONNECT和 RESOURCE角色。
# step3 为当前数据库会话启用ACCESS DATABASE角色
connect user1/123456;

set role access_database;

select * from session_roles;

ROLE
------------------------------
ACCESS_DATABASE
可以看出,SETROLE强制当前会话使用ACCESS DATABASE角色。
# step SET ROLE NONE语句强制当前会话禁用所有角色,这样当前用户的会话将失去所有权限

conn user1/123456;

set role none;

select * from session_roles;

------------------------------
未选定行

create table temp (id number,name varchar2(20)) tablespace USERS;

------------------------------
第1行出现错误:
ORA-01031:权限不足
6.2 回收权限

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

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

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

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

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

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

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

CONNECT sys/sysroot as sysdba;
CREATE USER user1 IDENTIFIED BY teacher;;
connect user1/teacher;
6.4.2 使用权限控制

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

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


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

用户设置文件是Oracle安全计谋的重要构成部分,利用用户设置文件可以对数据库用户进行根本的资源限制,并
且可以对用户的密码进行管理。
在安装数据库时,Oracle会主动建立名为DEFAULT的默认资源文件。假如没有为新创建的用户指定设置文件,
Oracle将会主动为它指定DEFAULT资源文件。另外,假如用户在自定义的资源文件中没有指定某项参数,Oracle
也会使用 DEFAULT 资源文件中相应参数设置作为默认值。
1、利用用户设置文件
利用用户设置文件,可以对体系资源进行限制,其详细介绍如表所示。
https://i-blog.csdnimg.cn/blog_migrate/0801b2264f242aff12a7288578a7d175.png#pic_center
2、密码限制次数
用户设置文件除了可以用于资源管理外,还可以对用户的密码计谋进行控制。使用设置文件可以实现账户的锁定、
密码的过期时间、密码的复杂度三种密码管理。
在资源设置文件中,对用户密码的限制参数如表所示。
https://i-blog.csdnimg.cn/blog_migrate/dba060373b24c38bc8472c504d2c7aad.png#pic_center
3、管理用户设置文件
用户设置文件现实上是对用户使用的资源进行限制的参数集。一般来说,为了有效地节省体系硬件资源,在设置配
置文件中的限制参数时,通常会设置SESSION_PER_USER和IDLE_TIME,以防止多个用户使用同一个用户账号连
接,并限制会话的空闲时间,而对于其他限制参数则不进行设置。
https://i-blog.csdnimg.cn/blog_migrate/33c0440d7ef0f9434a4f99b068410432.png#pic_center
别的,还可以通过查询数据字典的DBA_PROFILES视图来查看设置文件信息。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Oracle+11g+笔记(6)-数据库用户管理