1 用户权限及角色管理
  2     在Oracle 中将每一个用户都作为数据库对象存在。虽然在Oracle 数据库中已经提供了大量的用户,但是从安全及维护的角度来讲,往往需要创建属于自己的用户。如果要创建用户,可以利用CREATE USER 语法来完成。
  3     
  4 1 创建用户语法 (需要有管理员权限)
  5 CREATE USER 用户名 IDENTIFIED BY 密码
  6 [DEFAULT TABLESPACE 表空间名称]    
  7 [TEMPORARY TABLESPACE 表空间名称]    
  8 [QUOTA 数字 [K|M]UNLIMITED ON 表空间名称
  9  QUOTA 数字 [K|M]UNLIMITED ON 表空间名称 ...]
 10 [PROFILE 概要文件名称 |DEFAULT]
 11 [PASSWORD EXPIRE]
 12 [ACCOUNT LOCK |UNLOCK]    
 13 
 14     1. CREATE USER 用户名 IDENTIFIED BY 密码 : 创建用户同时设置密码,但是用户名和密码不能是 Oracle 的保留字(如CREATE 、DROP等),也不能以数字开头(如果要设置为数字,需要将数字使用'"'声明,如“999777”)。
 15     2.    DEFAULT TABLESPACE 表空间名称: 用户存储默认使用的表空间,当用户创建对象没有设置表空间时,就将保存在此处指定的表空间下,这样可以和系统表空间进行区分。
 16     3. TEMPORARY TABLESPACE 表空间名称:用户所使用的临时表空间。
 17     4. QUOTA 数字 [K|M]UNLIMITED ON 表空间名称: 用户在表空间上的使用限额,可以指定多个表空间限额,如果设置为 UNLIMITED,则表示不设置限额。
 18     5. PROFILE 概要文件名称 |DEFAULT : 用户操作的资源文件,如果不指定则使用默认配置资源文件。
 19     6.  PASSWORD EXPIRE:用户密码失效,则在第一次使用是必须修改密码。
 20     7.  ACCOUNT LOCK |UNLOCK:用户是否为锁定状态,默认为 UNLOCK。
 21 
 22 --范例1:创建一个新的用户 C##mldnuser ,密码为 java_android。
 23 CREATE USER C##mldnuser 
 24 IDENTIFIED BY java_android
 25 DEFAULT TABLESPACE  mldn_data
 26 TEMPORARY TABLESPACE mldn_temp
 27 QUOTA 30 M  mldn_data
 28 QUOTA 20 M  users
 29 ACCOUNT UNLOCK
 30 PASSWORD EXPIRE;
 31 
 32    1.CREATE USER C##mldnuser :该用户默认使用的表空间。如果用户在创建数据库对象时没有指定表空间,则就默认使用 mldn_data 表空间存储。
 33    2.TEMPORARY TABLESPACE mldn_temp: 该用户使用 ORDER BYGROUP BY 子句数据量过大保存的临时表空间。
 34    3.QUOTA 30 M  mldn_data :该用户在 mldn_data 表空间上最多使用 30M 大小。
 35    4.QUOTA 20 M  users : 该用户在 users 表空间上最多使用 30M 大小。
 36    5.ACCOUNT UNLOCK:该用户默认为活动账户。
 37    6.PASSWORD EXPIRE : 用户登录后需要强制用户修改密码。
 38 
 39 --范例2:通过 dba_users 数据字典查看用户信息
 40 SELECT user_name,user_id,default_tablespace,temporary_tablespace,created,lock_date,profile
 41 FROM dba_users
 42 WHERE username='C##mldnuser';
 43   -- lock_date :默认创建的用户非锁定用户,而当一个用户锁定之后,lock_data列就会变为锁定日期。
 44   
 45 --范例3:通过 dba_ts_quotas 数据字典查看用户可用表空间配额。(每一个用户都存在多个可以操作的表空间,可以通过 dba_ts_quotas 数据字典查看一个用户所使用的表空间配额。)
 46 SELECT * FROM dba_ts_quotas WHERE username='C##mldnuser';
 47 
 48 2 概要文件(profiles)
 49     概要文件是一组命名了的口令和资源限制文件,管理员利用它可以直接限制用户的资源访问量或用户管理等操作。
 50     
 51 2.01 创建概要文件语法
 52     CREATE PROFILE 概要文件名称 LIMIT 命令(s);
 53 --在概要文件中可以通过如下两组命令格式来进行控制:
 54     第一组:资源限制命令
 55     1.     SEEEION_PER_USER 数字 | UNLIMITED| DEFAULT : 允许一个用户同时创建 SESSION 的最大数量。
 56     2.  CPU_PER_SESSION 数字  | UNLIMITED| DEFAULT : 每一个 SEEION 允许使用CPU 的时间数,单位为毫秒。
 57     3.  CPU_PER_CALL   数字 | UNLIMITED| DEFAULT :限制每次调用SQL语句期间,CPU的时间总量。
 58     4.  CONNECT_TIME 数字 | UNLIMITED| DEFAULT :每个SESSION 的连接时间数,单位为分。
 59     5.  IDLE_TIME  数字 | UNLIMITED| DEFAULT :每个SESION 的超时时间,单位为分。
 60     6.  LOGICAL_READS_PER_SESSION 数字  | UNLIMITED| DEFAULT : 为了防止笛卡尔积的产生,可以限定每一个用户最多允许读取的数据块数。
 61     7.  LOGICAL_READS_PER_CALL      数字  | UNLIMITED| DEFAULT : 每次调用SQL 语句期间,最多允许用户读取的数据库块数。
 62     第二组:口令限制命令
 63     1. FAILED_LOGIN_ATTEMPTS 数字 | UNLIMITED| DEFAULT :当连续登录失败次数达到参数指定值时,用户被加锁。
 64     2. PASSWORD_LIFE_TIME 数字 | UNLIMITED| DEFAULT :口令的有效期(天),默认为 UNLIMITED 。
 65     3. PASSWORD_REUSE_TIME 数字 | UNLIMITED| DEFAULT :口令被修改后原有口令隔多少天后可以被重新使用,默认为UNLIMITED 。
 66     4. PASSWORD_REUSE_MAX 数字 | UNLIMITED| DEFAULT :口令被修改后原有口令被修改多少次才允许被重新使用。
 67     5. PASSWORD_VERIFY_FUNCTION 数字 | UNLIMITED| DEFAULT :口令校验函数 。 
 68     6. PASSWORD_LOCK_TIME 数字 | UNLIMITED| DEFAULT : 账户因 FAILED_LOGIN_ATTEMPTS 锁定时,加锁天数。
 69     7. PASSWORD_GRACE_TIME 数字 | UNLIMITED| DEFAULT :口令过期后,继续使用元口令的宽限期(天)。
 70     
 71     
 72 --用例1 : 定义一个概要文件 (管理员)。    
 73 CREATE PROFILE c##mldn_profile  LIMIT 
 74 CPU_PER_SESSION 10000
 75 LOGICAL_READS_PER_SESSION 20000
 76 CONNECT_TIME 60 
 77 IDLE_TIME 30
 78 SEEEION_PER_USER 10 
 79 FAILED_LOGIN_ATTEMPTS 3 
 80 PASSWORD_LOCK_TIME UNLIMITED
 81 PASSWORD_LIFE_TIME 60
 82 PASSWORD_REUSE_TIME 30
 83 PASSWORD_GRACE_TIME 6 
 84 ;
 85 
 86     本概要文件的组成说明如下所示:
 87     CPU_PER_SESSION 10000 :每个 SESSION 所允许占用CPU的最长时间为 100 秒。
 88     LOGICAL_READS_PER_SESSION 20000 :每个 SESSION 最多允许读取 20000 个数据库。
 89     CONNECT_TIME 60  :每个SESSION 最多允许连接60分钟。
 90     IDLE_TIME 30 :一个 SESSION 最大空闲时间为 30 分钟。
 91     SEEEION_PER_USER 10  :一个用户最多可以创建10 个 SESSION 连接。
 92     FAILED_LOGIN_ATTEMPTS 3  :每个用户登录错误为3次。
 93     PASSWORD_LOCK_TIME UNLIMITED :超过3次登录错误,则密码被长期锁定。
 94     PASSWORD_LIFE_TIME 60 :每60天修改一次密码。
 95     PASSWORD_REUSE_TIME 30 :为防止新旧口令一致,所以旧口令在30天之后才可以继续使用。
 96     PASSWORD_GRACE_TIME 6  :口令失效后,给用户6天可以继续使用旧口令的宽限期。
 97 
 98 --用例2: 查询 dba_profiles 数据字典 (查看概要文件的完整信息。)
 99 SELECT * FROM dba_profiles WHERE lower(profile)='c##mldn_profile';
100 
101 --用例3: 创建用户时指定概要文件。
102 CREATE USER c##mldnjava IDENTIFIED BY hello
103 PROFILE  c##mldn_profile ;
104    
105 --用例4:配置已存在用户使用的概要文件。
106 ALTER USER c##mldnuser PROFILE  c##mldn_profile ;
107 
108 
109 --用例5:查看 dba_users 数据字典,观察 c##mldnjava 和 c##mldnuser 两个用户的定义。
110 SELECT username,user_id,default_tablespace,temproar_tablespace,create,lock_date,profile 
111 FROM dba_users
112 WHERE username IN('c##mldnjava','c##mldnuser');
113 
114 --用例6:修改概要文件。
115 ALTER PROFILE c##mldn_profile LIMIT 
116 CPU_PER_SESSION 1000
117 PASSWORD_LIFE_TIME 10 ;
118 
119 2.02 删除概要文件
120 DROP PROFILE 概要文件名称 [CASCADE]; 
121 
122 --用例1:
123 DROP PROFILE c##mldn_profile CASCADE;
124 
125 
126 3  维护用户
127     用户创建完成后,管理员有可能会需要对用户进行基本的控制,所以在Oracle 中,可以通过下面几种命令来进行用户维护。
128 3.01 修改用户密码
129 ALTER USER 用户名 IDENTIFIED BY 新密码;
130 
131 --用例1 : 修改 c##mldnuser 的密码为 hellojava。
132 ALTER USER c##mldnuser IDENTIFIED BY hellojava;
133 
134 3.02 控制用户锁定
135 ALTER USER 用户名 ACCOUNT LOCK |UNLOCK;
136 
137 --用例1 :把用户 c##mldnuser 设置为锁定状态。    
138 ALTER USER c##mldnuser ACCOUNT LOCK ;
139 
140 --用例2 :把用户 c##mldnuser 解锁。    
141 ALTER USER c##mldnuser ACCOUNT UNLOCK;
142 
143 --用例3 :通过 dba_users 查看 mldnuser 用户的锁定信息。
144 SELECT USERNAME,USER_ID,FEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,CREATED,LOCK_DATE,PROFILE
145 FROM  DBA_USERS
146 WHERE USERNAME='c##mldnuser';
147 
148 3.03 让密码失效
149 ALTER USER 用户名  PASSWORD EXPIRE;
150 
151 --用例1 :把用户 c##mldnuser 密码失效。    
152 ALTER USER c##mldnuser PASSWORD EXPIRE;
153 
154 3.04 修改用户表空间限额
155 ALTER USER QUOTA  数字 [K|M]UNLIMITED ON 表空间名称 ...
156 
157 --用例1 :修改用户c##mldnuser 用户的表空间配额。
158 ALTER USER c##mldnuser
159 QUOTA 20M ON system
160 QUOTA 35M ON user;
161 
162 --用例2 :通过 dba_ts_quotas 查看 mldnuser 用户新表空间配额。
163 SELECT * FROM dba_ts_quotas WHERE username='c##mldnuser';
164 
165 3.05  删除用户
166 DROP USER 用户名 [CASCADE];
167 --如果用户在存在期间进行了数据库对象创建,则可以利用 CASCADE 子句删除模式中的所有对象。
168 --删除用户是一个危险的动作,用户下的所有对象都会一起被删除。
169 --用例1 :删除用户c##mldnuser
170 DROP USER c##mldnuser;
171 
172 4 权限管理
173     用户创建完成后实际上是没有任何权限的,即无法使用的。如果让一个用户真正可用,就必须为此用户授权。在Oracle 中,权限分为:
174     1.系统权限:进行数据库资源操作的权限,例如创建数据表、索引等权限。
175     2.对象权限:维护数据库中对象的能力,即:由一个用户操作另一个用户的对象。
176     --所有的权限应该由DBA进行控制,在SQL语句规范中针对系统的控制提供了两个核心的操作命令,授权(GRANT)、回收权限(REVOTE);
177 
178 4.01 系统权限 (十类权限)
179     系统权限主要是指资源操作的权限。例如,数据库管理员DBA是数据库系统中级别最高的用户,它拥有一切系统权限及各种资源的操作能力。在ORACLE 中有 100 多种权限。常用的如下:
180     序号|类型|权限|描述
181     1.用户及角色系统权限|CREATE USER|创建用户的权限
182     2.用户及角色系统权限|CREATE ROLE|创建角色的权限
183     3.用户及角色系统权限|ALTER USER|修改用户的权限
184     4.用户及角色系统权限|ALTER ANY ROLE|修改任意角色的权限
185     5.用户及角色系统权限|DROP USER|删除用户的权限
186     6.用户及角色系统权限|DROP ANY ROLE|删除任意角色的权限
187     
188     7.概要文件系统权限|CREATE PROFILE|创建概要文件的权限
189     8.概要文件系统权限|ALTER PROFILE|修改概要文件的权限
190     9.概要文件系统权限|DROP PROFILE|删除概要文件的权限
191     
192     10.同义词系统权限|CREATE ANY SYNONYM|为任意用户创建同义词的权限
193     11.同义词系统权限|CREATE SYNONYM|为用户创建同义词的权限
194     12.同义词系统权限|DROP PUBLIC SYNONYM|删除公共同义词的权限
195     13.同义词系统权限|DROP ANY SYNONYM|删除任意同义词的权限
196     
197     表系统权限|SELECT ANY TABLE|查询任意表的权限
198     15.表系统权限|SELECT TABLE|使用用户表的权限
199     16.表系统权限|UPDATE ANY TABLE|修改任意表中数据的权限
200     17.表系统权限|UPDATE TABLE|修改用户表中的行的权限
201     18.表系统权限|DELETE ANY TABLE|删除任意表行数据的权限
202     19.表系统权限|DELETE TABLE|为用户删除表行的权限
203     20.表系统权限|CREATE ANY TABLE|为任意用户创建表的权限
204     21.表系统权限|CREATE TABLE|为用户创建表的权限
205     22.表系统权限|DROP ANY TABLE|删除任意表的权限
206     23.表系统权限|ALTER ANY TABLE|修改任意表的权限
207     24.表系统权限|ALTER TABLE|修改拥有的表权限
208     
209     25.表空间系统权限|CREATE TABLESPACE|创建表空间的权限
210     26.表空间系统权限|ALTER TABLESPACE|修改表空间的权限
211     27.表空间系统权限|DROP TABLESPACE|删除表空间的权限
212     28.表空间系统权限|UNLIMITED TABLESPACE|对表空间大小不加限制的权限
213     
214     29.索引系统权限|CREATE ANY INDEX|为任意用户创建索引的权限
215     30.索引系统权限|DROP ANY INDEX|删除任意索引的权限
216     31.索引系统权限|ALTER ANY INDEX|修改任意索引的权限
217     
218     32.会话系统权限|CREATE SESSION|创建会话的权限
219     33.会话系统权限|ALTER SESSION|修改数据库会话的权限
220     
221     34.视图系统权限|CREATE ANY VIEW|为任意用户创建视图的权限
222     35.视图系统权限|CREATE VIEW|为用户创建视图的权限
223     36.视图系统权限|DROP ANY VIEW|删除任意视图的权限
224     37.视图系统权限|SELECT VIEW|使用视图的权限
225     38.视图系统权限|UPDATE VIEW|修改视图中行的权限
226     39.视图系统权限|DELETE ANY VIEW|删除任意视图行的权限
227     40.视图系统权限|DELETE VIEW|删除视图行的权限
228     
229     41.序列系统权限|CREATE ANY SEQUENCE|为任意用户创建序列的权限
230     42.序列系统权限|CREATE SEQUENCE|为用户创建序列的权限
231     43.序列系统权限|ALTER ANY SEQUENCE|修改任意序列的权限
232     44.序列系统权限|ALTER SEQUENCE|修改拥有的序列权限
233     45.序列系统权限|DROP ANY SEQUENCE|删除任意序列的权限
234     46.序列系统权限|SELECT ANY SEQUENCE|使用任意序列的权限
235     47.序列系统权限|SELECT SEQUENCE |使用用户序列的权限
236     
237     48.子程序(存储过程)系统权限|CREATE ANY PROCEDURE|为任意用户创建存储过程的权限
238     49.子程序(存储过程)系统权限|CREATE PROCEDURE|为用户创建存储过程的权限
239     50.子程序(存储过程)系统权限|CREATE ANY TRIGGER|为任意用户创建触发器的权限
240     51.子程序(存储过程)系统权限|ALTER PROCEDURE|修改拥有的存储过程权限
241     52.子程序(存储过程)系统权限|ALTER ANY TRIGGER|修改任意触发器的权限
242     53.子程序(存储过程)系统权限|EXECUTE ANY PROCEDURE|执行任意存储过程的权限
243     54.子程序(存储过程)系统权限|EXECUTE FUNCTION|执行存储函数的权限
244     55.子程序(存储过程)系统权限|EXECUTE PACKAGE|执行存储包的权限
245     56.子程序(存储过程)系统权限|EXECUTE PROCEDURE|执行用户存储过程的权限
246     57.子程序(存储过程)系统权限|DROP ANY PROCEDURE|删除任意存储过程的权限
247     58.子程序(存储过程)系统权限|DROP ANY TRIGGER|删除任意触发器的权限
248 
249 --以上权限操作中,凡是带有 ANY 的表示可以在任何数据库模式(用户)中都可以具备相应的权限。
250 
251 4.02 SYSOPER 和 SYSDBA 权限
252     在用户使用 CONN 进行连接时,可以通过AS设置 SYSOPER 或SYSDBA,实际上这两种连接方式对应两种特殊的系统权限,分别是 SYSOPER 权限和 SYSDBA 权限(需要Oracle体系结构的知识):
253     1. SYSOPER 系统权限包括的授权操作如下:
254        1.1 执行 STARTUP 和 SHUTDOWN 操作;
255        1.2 执行 ALTER DATABASE OPEN|MOUNT|BACKUP;
256        1.3 ARCHIVELOG 和 RECOVERY;
257        1.4 CREATE SPFILE;
258        1.5 RESTRICTED SESSION 权限;
259        
260     2. SYSOPER 系统权限包括的授权操作如下:
261        2.1 CREATE DATABASE;
262        2.2 ALTER TABLESPACE BEGIN /END BACKUP;
263        2.3 RECOVER DATABASE UNTIL       
264     
265 4.03 为用户授权    
266 GRANT 权限 ,...
267 TO [用户名,...|角色名,...|PUBLIC]
268 [WITH ADMIN OPTION]
269 
270   权限:主要指定是各个系统权限
271 
272 --用例1:为 c##mldnuser 用户授予 CREATE SESSION 权限 (如果某一个用户缺失了创建 SESSION 的权限,那么就表示无法登录。)。
273 GRANT CREATE SESSION TO  c##mldnuser;
274 
275 --用例2:为 c##mldnuser 用户授权(创建任何对象的权限)
276 GRANT CREATE TABLE ,CREATE SEQUENCE ,CREATE VIEW TO c##mldnuser WITH ADMIN OPTION;
277     --WITH ADMIN OPTION ,子句表示用户 c##mldnuser 可以将其权限授予其他用户。
278 
279 --用例3:利用 c##mldnuser 用户登录,而后将创建表及创建序列的权限授权 c##mldnjava    
280 GRANT CREATE TABLE,CREATE SEQUENCE TO  c##mldnjava;
281     
282     
283 --用例4:通过 dba_sys_privs 数据字典查看用户权限
284 SELECT * 
285 FROM dba_sys_privs
286 WHERE grantee IN ('c##mldnjava','c##mldnuser')
287 ORDER BY grantee DESC;
288     
289 4.04 撤销权限
290 REVOKE 权限,... FROM 用户名;
291 
292 --用例1: 将用户c##mldnuser的 CREATE VIEW ,CREATE TABLE 权限回收。
293 REVOKE CREATE VIEW ,CREATE TABLE FROM c##mldnuser;
294 
295 --用例2:通过 dba_sys_privs 数据字典查看用户权限
296 SELECT * 
297 FROM dba_sys_privs
298 WHERE grantee IN ('c##mldnuser')
299 ORDER BY grantee DESC;
300 
301 --用例3:通过 c##mldnuser 用户回收 c##mldnjava 用户的 CREATE SEQUENCE 权限
302 REVOKE CREATE SEQUENCE FROM c##mldnjava;
303 
304 
305 5 对象权限(8类对象权限)
306     虽然 c##mldnuser 用户具备的 CREATE SESSION 的操作权限,但是如果想访问 c##scott用户的资源,那么也无法操作,必须进行对象权限授权。
307     对象权限值的是数据库中某一个对象所用拥有的权限,即可以通过某一个用户的对象权限,让其他用户来操作本用户中的所有授权的对象。
308     在 ORACLE 一共定义了 8 种 对象权限,分别是 SELECT , INSERT ,UPDATE , DELETE, EXECUTE, ALTER, INDEX, REFERENCES ,这8种对象权限的操作关系如下:
309     
310     序号|对象权限|表(Table)|序列(Sequence)|视图(View)|子程序(Procedure)|
311     1.|查询(SELECT)||||X|
312     2.|增加(INSERT)||X||X|
313     3.|更新(UPDATE)||X||X|
314     4.|删除(DELETE)||X||X|
315     5.|执行(EXECUTE)|X|X|X||
316     6.|修改(ALTER)||||X|
317     7.|索引(INDEX)||X||X|
318     8.|关联(REFERENCES)||X|X|X|
319 
320 --语法:授予对象权限
321 GRANT 对象权限 |ALL[(列,...)]
322 ON 对象
323 TO [用户名|角色名|PUBLIC]
324 [WITH ADMIN OPTION];
325    1.对象权限:指的是上面列出的8类权限,如果设置为ALL 表示所有对象权限。
326    2.ON:要授予权限的对象名称。
327    3.TO:将此权限授予的用户名称或角色名称,如果设置为 PUBLIC 表示为公共权限。
328    4.WITH GRANT OPTION:允许授权用户授权其他用户。
329 
330 --用例1:为 c##mldnuser 用户授予 c##scott 用户 dept 表的查询及增加权限。
331 GRANT SELECT ,INSERT ON c##scott.dept TO c##mldnuser;
332 
333 --用例2:将 c##scott.dept 数据表更新部门名称(dname)的权限授予 c##mldnuser 用户。
334 GRANT UPDATE(dname) ON c##scott.dept TO c##mldnuser;
335 
336 --用例3: 查询当前登录用户下的所有对象权限。
337 CONN c##mldnuser/hellojava
338 COL owner FOR A10;
339 COL table_name FOR A10;
340 COL grantor FOR A10;
341 COL privilege FOR A10;
342 SELECT * FROM  user_tab_privs_recd;
343 
344 --用例4: 查询当前用户所具备的列的对象权限,可以使用 user_col_privs_recd 数据字典查询。
345 COL owner FOR A10;
346 COL table_name FOR A10;
347 COL grantor FOR A10;
348 COL privilege FOR A10;
349 SELECT * FROM  user_col_privs_recd;
350 
351 --用例5:查询对象属者分配的权限:如果现在希望知道某一个数据库对象分配出去了哪些权限,则可以使用 user_tab_privs_made 和 user_col_privs_made 数据字典查看相关信息。
352 SELECT * FROM user_tab_privs_made;
353 SELECT * FROM user_col_privs_made;
354 
355 6 回收对象权限 (只能按照对象权限回收,不能按照列权限回收)
356 REVOKE[ 权限 ,...|ALL] 
357 ON 对象
358 FROM [ 用户 ,...|角色|PUBLIC];
359 
360 --用例1: 回收 c##scott 上的相关权限
361 REVOKE SELECTINSERT ON c##scott.dept FROM c##mldnuser ;
362 REVOKE UPDATE ON c##scott.dept FROM c##mldnuser ;
363 
364 7 角色(一组相关权限的集合)
365     建立用户而后为其授权是用户管理的基本操作,但是如果想让一个用户正常进行操作,那么肯定需要授予很多的操作权限。如果有100个用户,二者这些用户都需要具备相同的权限,那么在进行权限维护的时候肯定不可能针对 100 个用户分别维护,而是需要将所有用户的权限一起进行维护。在这时就只能将多个权限加入到一个角色中,通过对角色的维护来实现对多个用户的权限维护(可以是系统权限,也可以是对象权限)。所以,所谓的角色是一组相关权限的集合。
366     
367 7.01 管理员可以通过3个数据字段查看用户、角色、权限的信息
368     dba_sys_privs: 查看用户所拥有的权限。
369     dba_role_privs: 查看用户所拥有的角色。
370     role_sys_privs:    查看角色所拥有的权限。
371 
372 7.02 创建角色的权限 (DBA 或 CREATE ROLE 权限的用户)
373 语法:
374 CREATE ROLE 角色名称
375 [NOT IDENTIFIED | IDENTIFIED BY 密码];
376     1.NOT IDENTIFIED (默认): 不需要任何的口令标记。
377     2.IDENTIFIED BY 密码 :创建角色的时候同时设置密码,该密码主要用于角色激活时使用。
378 
379 ---注意: Oracle 12C开始,如果是在 CDB 下创建角色,必须使用 C## 开头。
380 
381 --用例1:创建一个普通的角色。
382 CREATE ROLE c##mldn_role_a;
383 
384 --用例2:创建一个带有密码的角色。
385 CREATE ROLE c##mldn_role_b IDENTIFIED BY hellojava;
386 
387 --用例3: 关于角色的密码,在创建角色时所设置的密码是在角色启用时使用的,如果用户需要观察一下,可以试验以下几个语句:
388   --1.禁用当前会话中的所有角色。
389   SET ROLE NONE;
390   --2.启用当前会话中的所有角色。
391   SET ROLE ALL;
392   --3. 启用 c##mldn_role_b 角色,此角色存在密码。
393   SET ROLE c##mldn_role_b IDENTIFIED BY hellojava;
394   
395 --用例4:查看创建完的角色 dba_roles 
396 SELECT *
397 FROM dba_roles
398 WHERE lower(role) in ('c##mldn_role_a','c##mldn_role_b') ;
399 
400 
401 
402 7.03 角色授权
403     当一个角色创建完成后,里面并没有任何的权限,用户可以使用 GRANT 为角色进行授权(系统权限+对象权限)。
404     
405 --用例1:为 c##mldn_role_a 角色授权。以下4 个权限可以保证 c##mldn_role_a 角色下的所有管理员都将具备创建基本数据库对象的能力。
406 GRANT CREATE SESSION ,CREATE TABLE, CREATE VIEW,CREATE SEQUENCE TO c##mldn_role_a ;
407   
408 --用例2:为 c##mldn_role_b 角色授权。
409 GRANT CREATE SESSION ,CREATE ANY TABLE, INSERT ANY TABLE TO c##mldn_role_b ;
410   
411 --用例3:查询 role_sys_privs 数据字典。
412 SELECT *
413 FROM role_sys_privs
414 WHERE lower(role) in ('c##mldn_role_a','c##mldn_role_b')
415 ORDER BY role ;
416 
417 7.04 为用户授予角色
418     将角色授予用户与将权限授予用户的方式是非常类似的。
419 
420 --用例1:将 c##mldn_role_a 的角色授予 c##mldnuser 用户 。
421 GRANT     c##mldn_role_a TO c##mldnuser ;
422 
423 --用例2:将 c##mldn_role_a 和 c##mldn_role_b 的角色授予 c##mldnjava 用户。    
424 GRANT     c##mldn_role_a,c##mldn_role_b TO c##mldnjava ;
425 
426 --用例3:查询 c##mldnuser 用户权限。
427 CONN c##mldnuser/hellojava
428 COL priliege FOR A30;
429 SELECT * 
430 FROM session_privs;
431 
432 
433 
434 7.05 修改角色及回收角色权限
435     角色创建之后,也可以针对角色的状态或角色中的权限进行修改。
436 
437 7.05.01 设置或取消角色密码
438 ALTER ROLE 角色名称 [NOT IDENTIFIED |IDENTIFIED BY 密码];
439 
440 --用例1:将 c##mldn_role_a 的角色密码设置为 hellomldn
441 ALTER ROLE  c##mldn_role_a IDENTIFIED BY hellomldn ; 
442 
443 --用例2:取消 c##mldn_role_b 的角色密码
444 ALTER ROLE  c##mldn_role_b NOT IDENTIFIED ;
445 
446 7.05.02 通过角色回收权限
447 
448 --用例1:将 CREATE SESSION 的权限从 c##mldn_role_a 角色中回收。
449 REVOKE CREATE SESSION FROM c##mldn_role_a ;
450 --用例2:查询 角色中的权限信息。
451 SELECT *
452 FROM role_sys_privs
453 WHERE lower(role) in ('c##mldn_role_a')
454 ORDER BY role ;
455 
456 
457 7.08 删除角色
458 DROP ROLE 角色名称;
459 
460 --用例1:删除 c##mldn_role_b 角色 ,角色被删除之后,其拥有此角色的用户权限也将一起被删除。
461  
462 7.09 预定义角色
463     在 Oralce 中为了减轻管理员的负担专门提供了一些预定义角色,这些角色的定义如下:
464     序号|预定义角色|描述
465     1.|EXP_FULL_DATABASE|导出数据库权限
466     2.|IMP_FULL_DATABASE|导入数据库权限
467     3.|SELECT_CATALOG_ROLE|查询数据字典权限
468     4.|EXECUTE_CATALOG_ROLE|数据字典上的执行权限
469     5.|DELETE_CATALOG_ROLE|数据字典上的删除权限
470     6.|DBA|系统管理的相关权限
471     7.|CONNECT|授予用户最典型的权限
472     8.|RESOURCE|授予开发人员的权限
473 
474 --在 Oracle 中 有两个最大的角色, 即 CONNECT、RESOURCE 。
475 
476 --用例1:通过sys用户查询 CONNECT、RESOURCE角色所拥有的权限。
477 SELECT * 
478 FROM role_sys_privs
479 WHERE role IN ('CONNECT','RESOURCE')
480 ORDER BY role;
481 
482 --用例2:将 CONNECT、RESOURCE角色授予用户 c##mldnuser 
483 GRANT CONNECT,RESOURCE TO c##mldnuser;

 

posted on 2023-04-03 20:34  言溪清流  阅读(43)  评论(0)    收藏  举报