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 BY 或 GROUP 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 SELECT,INSERT 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;
浙公网安备 33010602011771号