用户管理

在创建Oracle数据库时会自动创建一些用户,例如SYS、SYSTEM、SCOTT等,Oracle数据库允许数据库管理员创建用户。
SYS:是数据库中具有最高权限的数据库管理员,被授予了DBA角色,可以启动、修改和关闭数据库,拥有数据字典。
SYSTEM:是辅助数据库管理员,不能启动和关闭数据库,可以进行一些其他的管理工作,例如创建用户、删除用户等。
SCOTT:数据库的测试用户,默认口令为tiger。在该用户下已经创建了一些数据表,用于用户学习及测试网络连接,包括:EMP表、DEPT表等。

创建用户

语法

1
2
3
4
5
6
7
8
9
10
CREATEUSER<用户名>/*将要创建的用户名*/
[IDENTIFIEDBY{<密码>|EXTERNALLLY|
GLOBALLYAS'<外部名称>'}]/*表明Oracle如何验证用户*/
[DEFAULTTABLESPACE<默认表空间名>]/*标识用户所创建对象的默认表空间*/
[TEMPORARYTABLESPACE<临时表空间名>]/*标识用户的临时段的表空间*/
/*用户规定的表空间存储对象,最多可达到这个定额规定的总尺寸*/
[QUOTA<数字值>K|<数字值>M|UNLIMTEDON<表空间名>]
[PROFILE<概要文件名>]/*将指定的概要文件分配给用户*/
[PASSWORDEXPIRE]
[ACCOUNT{LOCK|NULOCK}]/*账户是否锁定*/

说明:
●IDENTIFIED BY<密码>:用户通过数据库验证方式登录,登录时需要提供的口令;
●IDENTIFIED EXTERNALLY:用户需要通过操作系统验证;
●DEFAULT TABLESPACE <默认表空间名>:为用户指定默认表空间;
●TEMPORARY TABLESPACE <临时表空间名>:为用户指定临时表空间;
●QUOTA:定义在表空间中允许用户使用的最大空间,可将限额定义为整数字节或千字节/兆字节。其中关键字UNLIMITED用户指定用户可以使用表空间中全部可用空间;
●PROFILE:指定用户的资源配置。
●PASSWORD EXPIRE:强制用户在使用SQL*Plus登录到数据库时重置口令(该选项仅在用户通过数据库进行验证时有效);
●ACCOUNT LOCK | UNLOCK:可用于显示锁定或解除锁定用户账户(UNLOCK为缺省设置);

样例

1
2
3
4
5
6
CREATE USER Beyond
IDENTIFIED BY 123456
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
commit;

然后你屁颠屁颠去打开了另一个SQL PLUS,验证能否登录时就会看见
lacks
那是因为你没有给beyond授权与数据库会产生会话的权限。用system运行

1
grant create session to Beyond;

即可。

修改用户

语法

1
2
3
4
5
6
7
8
9
ALTERUSER<用户名>
[IDENTIFIEDBY{<密码>|EXTERNALLLY|
GLOBALLYAS'<外部名称>'}]
[DEFAULTTABLESPACE<默认表空间名>]
[TEMPORARYTABLESPACE<临时表空间名>]
[QUOTA<数字值>K|<数字值>M|UNLIMTEDON<表空间名>]
[PROFILE<概要文件名>]
[PASSWORDEXPIRE]
[ACCOUNT{LOCK|NULOCK}]

其中关键字的意义参看CREATEUSER语句中的意义。

删除用户

1
DROPUSER<用户名>[CASCADE];

如果使用CASCADE选项,则删除用户时将删除该用户模式中的所有对象。如果用户拥有对象,则删除用户时若不使用CASCADE选项系统将给出错误信息。

查询用户信息

通过查询数据字典视图可以获取用户信息、权限信息和角色信息。
数据字典视图如下:
(1)ALL_USERS:当前用户可以看见的所有用户。
(2)DBA_USERS:查看数据库中所有的用户信息。
(3)USER_USERS:当前正在使用数据库的用户信息。
(4)DBA_TS_QUOTAS:用户的表空间限额情况。
(5)USER_PASSWORD_LIMITS:分配给该用户的口令配置文件参数。
(6)USER_RESOURCE_LIMITS:当前用户的资源限制。
(7)V$SESSION:每个当前会话的会话信息。
(8)V$SESSTAT:用户会话的统计数据。
(9)DBA_ROLES:当前数据库中存在的所有角色。
(10)SESSION_ROLES:用户当前启用的角色。
(11)DBA_ROLE_PRIVS:授予给用户(或角色)的角色,也就是用户(
或角色)与角色之间的授予关系。

1
SELECT * FROM ALL_USERS;

权限管理

权限是预先定义好的执行某种SQL语句或访问其他用户模式对象的能力。权限分为系统权限数据库对象权限两类。
系统权限是指在系统级控制数据库的存取和使用的机制,即执行某种SQL语句的能力。例如,启动、停止数据库,修改数据库参数,连接到数据库,以及创建、删除、更改模式对象(如表、视图、过程等)等权限。
对象权限是指在对象级控制数据库的存取和使用的机制,即访问其他用户模式对象的能力。例如,用户可以存取哪个用户模式中的哪个对象,能对该对象进行查询、插入、更新操作等。

系统权限

系统权限分类

数据字典视图SYSTEM_PRIVILEGE_MAP中包括了Oracle数据库中的所有系统权限,查询该视图可以了解系统权限的信息:

1
select * from system_privilege_map;

系统权限的授予

系统权限的授予使用GRANT语句。

1
2
3
GRANT <系统权限名> TO {PUBLIC | <角色名> | <用户名>
[,..n]}
[ WITH ADMIN OPTION]

其中,PUBLIC是Oracle中的公共用户组,如果将系统权限授予PUBLIC,则将系统权限授予所有用户。使用WITH ADMIN OPTION,则允许被授予者进一步为其他用户或角色授予权限,此即系统权限的传递性。
例如

1
GRANT CREATE ANY TABLE, CREATE ANY VIEW TO Beyond;

系统权限的收回

数据库管理员或者具有向其他用户授权的用户可以使用REVOKE语句将已经授予的系统权限收回。
语法格式:

1
REVOKE<系统权限名>FROM{PUBLIC|<角色名>|<用户名>[,..n]};

对象权限

对象权限是一种对于特定对象(表、视图、序列、过程、函数或包等)执行特定操作的权限。如对某个表或视图对象执行INSERT、DELETE、UPDATE、SELECT操作时,都需要获得相应的权限才允许用户执行。Oracle对象权限是oracle数据库权限管理的重要组成部分。

对象权限的分类

Oracle对象有下列9种权限。
(1)SELECT:读取表、视图、序列中的行。
(2)UPDATE:更新表、视图和序列中的行。
(3)DELETE:删除表、视图中的数据。
(4)INSERT:向表和视图中插入数据。
(5)EXECUTE:执行类型、函数、包和过程。
(6)READ:读取数据字典中的数据。
(7)INDEX:生成索引。
(8)PEFERENCES:生成外键。
(9)ALTER:修改表、序列、同义词中的结构。

对象权限的授予

授予对象权限使用GRANT语句。
语法格式:

1
2
3
4
5
GRANT {<对象权限名> | ALL [PRIVILEGE] [(<列名>
[,…n])]}
ON [用户方案名.] <对象权限名> TO {PUBLIC | <角色名
> | <用户名> [,..n]}
[WITH GRANT OPTION];

其中,ALL关键字表示将全部权限授予该对象,ON关键字表用于
指定被授予权限的对象,WITH GRANT OPTION选项表示被授予对象
权限的用户可再将对象权限授予其他用户。
例如

1
2
GRANT SELECT, INSERT, UPDATE, DELETE
ON course TO Beyond;

对象权限的收回

收回对象权限使用REVOKE语句。
语法格式:

1
2
3
4
5
REVOKE {<对象权限名>| ALL [PRIVILEGE] [(<列名>
[,…n])]}
ON [用户方案名.] <对象权限名> TO {PUBLIC | <角色
名> | <用户名> [,..n]}
[CASCADE CONSTRAINTS];

其中,CASCADE CONSTRAINTS选项表示在收回对象权限时,同时删除使用REFERENCES对象权限定义的参照完整性约束。

权限查询

通过查询以下数据字典视图可以获取权限信息:
(1)DBA_SYS_PRIVS:授予用户或者角色的系统权限。
(2)USER_SYS_PRIVS:授予当前用户的系统权限。
(3)SESSION_PRIVS:用户当前启用的权限。
(4)ALL_COL_PRIVS:当前用户或者PUBLIC用户组是其所有者、授予者或者被授予者的用户的所有列对象(即表中的字段)的授权。
(5)DBA_COL_PRIVS:数据库中所有的列对象的授权。
(6)USER_COL_PRIVS:当前用户或其所有者、授予者或者被授予者的所有列对象的授权。
(7)DBA_TAB_PRIVS:数据库中所用对象的权限。
(8)ALL_TAB_PRIVS:用户或者PUBLIC是其授予者的对象的授权。
(9)USER_TAB_PRIVS:当前用户是其被授予者的所有对象的授权。

角色管理

这个很简单,会用windows的人应该都知道。类似访客角色,家人角色,管理员角色。不同角色为一类有不同权限等级的集合。角色只有赋给用户才有用。

创建角色

语法格式:

1
2
3
4
CREATE ROLE <角色名>
[NOT IDENTIFIED]
[IDENTIFIED {BY <密>
EXTERNALLYGLOBALLY}];

IDENTIFIED表示在用SET ROLE语句使该角色生效之前必须由指定的方法来授权一个用户。
(1)BY:创建一个局部角色,在使角色生效之前,用户必须指定密码。密码只能是数据库字符集中的单字节字符。
(2)EXTERNALLY:创建一个外部角色。在使角色生效之前,必须由外部服务(如操作系统)来授权用户。
(3)GLOBALLY:创建一个全局角色。在利用SET ROLE语句使角色生效前或在登录时,用户必须由企业目录服务授权使用该角色。

修改角色

角色赋权

角色禁用启用

语法格式:

1
2
3
SET ROLE
{ 角色名[ IDENTIFIED BY 密码][,…n]
| ALL [ EXCEPT 角色名[, …n ] ] | NONE };

其中,IDENTIFIED BY子句用于为该角色指定密码,ALL选项表示将启用用户被授予的所有角色,EXCEPT 子句表示启用除该子句指定的角色外的其它全部角色,NONE选项表示禁用所有角色。
例如

1
SET ROLE Marketing1;

删除角色

查询角色信息

可以通过查询以下数据字典或动态性能视图获得数据库角色的相关信息。
(1)DBA_ROLES:数据库中的所有角色及其描述;
(2)DBA_ROLES_PRIVS:授予用户和角色的角色信息;
(3)DBA_SYS_PRIVS:授予用户和角色的系统权限;
(4)USER_ROLE_PRIVS:为当前用户授予的角色信息;
(5)ROLE_ROLE_PRIVS:授予角色;
(6)ROLE_SYS_PRIVS:授予角色的系统权限信息;
(7)ROLE_TAB_PRIVS:授予角色的对象权限信息;
(8)SESSION_PRIVS:当前会话所具有的系统权限信息;
(9)SESSION_ROLES:用户当前授权的角色信息。