Posts Oracle数据库学习-用户配置
Post
Cancel

Oracle数据库学习-用户配置

在Oracle中用户的创建与属性、权限的配置极其简单,但是如何高效地创建、管理可共享的权限与角色,与架构设计一样,它也需要DBA具有全局的观念。

一、Profile属性

什么是Profile

Profile定义了用户对于Oracle资源访问的限制性使用,比如该用户可以允许输错多少次密码,可以同时有多少个session同时访问,连接db时的空闲等待时限等等。每个用户可以共享一个DEFAULT的Profile,也可以单独配置一个Profile,或共享一个自定的Profile。 通过如下命令查看当前版本的database支持的profile的类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SQL> select distinct resource_name from dba_profiles;

RESOURCE_NAME
--------------------------------
FAILED_LOGIN_ATTEMPTS
COMPOSITE_LIMIT
SESSIONS_PER_USER
CPU_PER_CALL
PASSWORD_REUSE_TIME
PASSWORD_VERIFY_FUNCTION
PASSWORD_LOCK_TIME
LOGICAL_READS_PER_SESSION
LOGICAL_READS_PER_CALL
PRIVATE_SGA
PASSWORD_REUSE_MAX
CPU_PER_SESSION
IDLE_TIME
CONNECT_TIME
PASSWORD_GRACE_TIME
PASSWORD_LIFE_TIME

16 rows selected.

创建Profile

Oracle提供了一个默认的Profile,即DEFAULT。如果没有特别声明,则所有的用户都使用该Profile

1
select profile, resource_name, limit from dba_profiles where profile='DEFAULT';

接下来,创建我们自己的一个特定的Profile,比如要求每个用户至多只能有2个session,连接超时为30秒,修改密码至多有3次重复等,举例如下:

1
2
3
4
5
6
SQL> create profile my_profile limit
	 sessions_per_user 2
	 connect_time 30
	 password_reuse_max 3;

Profile created.

查看刚刚创建的my_profile,可以发现没有声明的其他Profile属性,都会采用DEFAULT Profile的定义,见如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SQL> select profile, resource_name, limit from dba_profiles where profile='MY_PROFILE';

PROFILE 		       RESOURCE_NAME			LIMIT
------------------------------ ------------------------------------------------
MY_PROFILE		       COMPOSITE_LIMIT			DEFAULT
MY_PROFILE		       SESSIONS_PER_USER		2
MY_PROFILE		       CPU_PER_SESSION			DEFAULT
MY_PROFILE		       CPU_PER_CALL			DEFAULT
MY_PROFILE		       LOGICAL_READS_PER_SESSION	DEFAULT
MY_PROFILE		       LOGICAL_READS_PER_CALL		DEFAULT
MY_PROFILE		       IDLE_TIME			DEFAULT
MY_PROFILE		       CONNECT_TIME			30
MY_PROFILE		       PRIVATE_SGA			DEFAULT
MY_PROFILE		       FAILED_LOGIN_ATTEMPTS		DEFAULT
MY_PROFILE		       PASSWORD_LIFE_TIME		DEFAULT
MY_PROFILE		       PASSWORD_REUSE_TIME		DEFAULT
MY_PROFILE		       PASSWORD_REUSE_MAX		3
MY_PROFILE		       PASSWORD_VERIFY_FUNCTION		DEFAULT
MY_PROFILE		       PASSWORD_LOCK_TIME		DEFAULT
MY_PROFILE		       PASSWORD_GRACE_TIME		DEFAULT

16 rows selected.

修改与删除Profile

修改Profile很简单,只需ALTER PROFILE命令即可。

删除Profile的命令需要说明,如果此Profile已被赋予了某个用户,删除后该用户的Profile则会被替换成系统默认的DEFAULT的Profile。具体命令如下(注意必须带CASCADE参数,即脱离所有关系):

1
DROP PROFILE my_profile CASCADE;

二、Privilege与Role

创建Role

多个用户可以共享一个Role,一个Role含多个权限,而权限的设置较为复杂多样,详情可以参看相应文档。

假设现在要创建一个自定义的Role:my_role,同时赋予一些系统权限:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SQL> CREATE ROLE my_role NOT IDENTIFIED;

Role created.

SQL> GRANT CREATE TRIGGER,
	  CREATE ANY SYNONYM,
	  CREATE VIEW,
	  CREATE TABLE,
	  CREATE ROLLBACK SEGMENT,
	  DROP PUBLIC SYNONYM,
	  CREATE PROCEDURE,
	  CREATE SESSION,
	  ADMINISTER DATABASE TRIGGER,
	  CREATE INDEXTYPE,
	  CREATE OPERATOR,
	  CREATE PUBLIC SYNONYM,
	  ALTER SESSION,
	  CREATE SEQUENCE,
	  CREATE SYNONYM,
	  QUERY REWRITE,
	  CREATE TYPE,
	  EXECUTE ANY PROCEDURE,
	  DROP ANY SYNONYM
TO my_role;

Grant succeeded.

修改与删除

1
2
ALTER ROLE ...
DROP ROLE my_role;

三、User

创建用户

创建用户的需要如下参数:

  • 设置用户名
  • 验证方法(一般为密码)
  • 默认的tablespace
  • temporary的tablespace
  • 空间配置
  • 指定Profile
  • 配置Role

如:

1
2
3
4
5
6
7
8
SQL> CREATE USER myuser
  IDENTIFIED BY oracle      --密码
  DEFAULT TABLESPACE USERS  --使用系统默认的users表空间
  TEMPORARY TABLESPACE TEMP --临时表空间
  QUOTA UNLIMITED ON USERS  --空间大小
  PROFILE my_profile;       --设定Profile

User created.

接下来应该是配置Role

1
2
3
SQL> GRANT my_role TO myuser;

Grant succeeded.

删除Profile和Role

1
2
3
4
5
6
7
8
9
--删除Role
SQL> revoke my_role from myuser;

Revoke succeeded.

--删除Profile(即用DEFAULT替换)
SQL> alter user myuser profile default;

User altered.

查看User role

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
--查看ROLE是否正确

SQL> select * from dba_role_privs where grantee='MYUSER';

GRANTEE 		       GRANTED_ROLE		      ADM DEF
------------------------------ ------------------------------ --- ---
MYUSER			       MY_ROLE			      NO  YES

SQL> select * from dba_sys_privs where grantee='MY_ROLE';

GRANTEE 		       PRIVILEGE				ADM
------------------------------ ---------------------------------------- ---
MY_ROLE 		       CREATE INDEXTYPE 			NO
MY_ROLE 		       EXECUTE ANY PROCEDURE			NO
MY_ROLE 		       CREATE VIEW				NO
MY_ROLE 		       CREATE ANY SYNONYM			NO
MY_ROLE 		       CREATE TRIGGER				NO
MY_ROLE 		       ALTER SESSION				NO
MY_ROLE 		       CREATE PROCEDURE 			NO
MY_ROLE 		       DROP PUBLIC SYNONYM			NO
MY_ROLE 		       DROP ANY SYNONYM 			NO
MY_ROLE 		       CREATE ROLLBACK SEGMENT			NO
MY_ROLE 		       ADMINISTER DATABASE TRIGGER		NO
MY_ROLE 		       CREATE OPERATOR				NO
MY_ROLE 		       CREATE PUBLIC SYNONYM			NO
MY_ROLE 		       CREATE TABLE				NO
MY_ROLE 		       CREATE SEQUENCE				NO
MY_ROLE 		       QUERY REWRITE				NO
MY_ROLE 		       CREATE TYPE				NO
MY_ROLE 		       CREATE SYNONYM				NO
MY_ROLE 		       CREATE SESSION				NO

19 rows selected.

至此,用户myuser创建完毕,权限与属性也分配完成。

This post is licensed under CC BY 4.0 by the author.