Oracle中的安全管理(用户、权限、角色)

目录

一、用户管理

1.1.什么是用户管理

1.1.1.创建用户

(1)使用SQL*Plus创建用户

示例1:在SQL*Plus中创建以口令方式验证的用户dba_news_user01

示例2:在SQL*Plus中创建以外部方式验证的用户USER3

示例3:在SQL*Plus中创建以外部方式验证的用户USER3

1.1.2.修改用户信息

1.1.3.删除用户

二、权限管理

2.1.什么是权限管理

2.2.查看用户权限

2.2.授予权限(grant)

2.2.1.授予系统权限

2.2.2.授予对象权限

2.3.撤销用户权限(revoke)

2.3.1.撤销系统权限

2.3.2.撤销对象权限

[三、角色管理(像java中的封装 一次创建、多次使用)](#三、角色管理(像java中的封装 一次创建、多次使用))

3.1.查询角色

3.1.1.查看当前数据库创建的角色信息

3.1.2.查询指定用户的角色

3.2.创建角色(包含授予角色本身权限)

3.2.1.创建角色

3.2.2.授予角色权限

3.3.修改角色

3.4.删除角色


用户管理和权限管理是确保数据库中数据安全的重要手段。如果能够正确地对数据库中的用户赋予权限,那么就能在很大程度上提高数据库的安全性。本次包括以下知识点:

❑用户的创建与管理

❑权限的创建与管理

❑角色的创建与使用

❑概要文件的创建与使用

本次内容基本涵盖了对数据库中的用户、权限、角色以及概要文件的创建与管理的方法。希望通过本次的学习,可以熟练地掌握数据库中的用户、权限、角色以及概要文件的使用方法。

如果有兴趣,也可以看一下MySQL的操作: MySQL中的SQL详解(DDL、DML、DQL、DCL)

问题背景:

在Oracle数据的日常运维中,用户权限的有效管理是至关重要的,这一点在我们部署Oracle的过程中应该有初步的深刻体会。在实际的项目过程中,如何有效的分配用户权限那也是至关重要。前不久,我接到了一个部署数据备份一体机的任务,里边为避免直接使用sys用户权限,就需要针对备份代理就需要创建一个合适的用户来进行管理。

一、用户管理

Oracle中的用户管理主要是针对数据库管理员说的,只有管理员才有权限创建、修改以及删除用户。本节就将介绍如何创建以及管理用户。

1.1.什么是用户管理

Oracle的用户管理应该说是每个数据库管理员都会遇到的一个问题,对用户管理涉及的主要问题就是用户所赋予的权限,根据每个用户访问Oracle数据库的需求不同,分配给用户的权限也就不同。如果数据库管理员对Oracle数据库用户的权限分配得合理,那么就能够提高数据库的安全性;相反,如果对Oracle数据库的用户权限分配得不合理,那么就会给数据库造成很大的隐患。对于权限分配的问题本次博客后续中会继续介绍。

在Oracle中用户登录数据库的方式主要有三种:

1)第一种是一般的密码验证方式。

2)第二种是外部验证方式,这种方式并没有把验证密码存放在Oracle数据库中,其验证的密码通常与数据库所在的操作系统的密码一致。

3)第三种就是全局验证方式,这种验证方式也不常用,它也不是把密码存放在Oracle数据库中的。

这三种验证方式中最常用的就是密码验证的方式,同时这种方式的安全性也更高一些。

1.1.1.创建用户

在Oracle中创建用户必须拥有数据库管理员的权限才能创建,在创建用户时还需要注意的是创建的用户的密码必须是以字母开头的。创建用户也可以在企业管理器中或者在SQL*Plus中使用语句创建。

(1)使用SQL*Plus创建用户

在SQL*Plus中创建用户使用的语法选项是比较多的。一般创建用户的语法如下:

CREATE USER username IDENTIFIED BY password

OR EXTERNALLY AS certificate_DN

OR GLOBALLY AS directory_DN

DEFAULT TABLESPACE tablespace

TEMPORARY TABLESPACE tablespace \| tablespace_group_name

QUOTA size \| UNLIMITED ON tablespace

PROFILE profile

PASSWORD EXPIRE

ACCOUNT LOCK \| UNLOCK

说明:

1)在创建用户时有三种验证方式,以口令作为验证方式时选择【IDENTIFIED BY password】选项即可;以外部作为验证方式时选择【EXTERNALLY AS certificate_DN】选项;以全局作为验证方式时选择【GLOBALLY AS directory_DN】选项即可。

2)DEFAULT TABLESPACE:设置默认表空间,如果省略了该语句,那么这个新创建的用户就存放在数据库的默认表空间中,如果数据库没有设置默认表空间,那么创建的用户就存放在SYSTEM表空间中。

3)TEMPORARY TABLESPACE:设置临时表空间或临时表空间组,可以把临时表空间存放在临时表空间组中,如果省略了该语句,那么就会把临时的文件存放到当前数据库中默认的临时表空间中;如果没有默认的临时表空间,那么会把临时文件存放到SYSTEM的临时表空间中。

4)QUOTA:设置当前用户使用表空间的最大值,在创建用户时可以有多个QUOTA来设置用户在不同表空间中能够使用的表空间大小。如果设置成UNLIMITED,表示对表空间的使用没有限制。注意:创建用户时不能设置用户在临时表空间上使用的范围。

5)PROFILE:设置当前用户使用的概要文件的名称,如果省略了该子句,那么用户就使用当前数据库中默认的概要文件。

6)PASSWORD EXPIRE:设置当前用户密码立即处于过期状态,用户如果想再登录数据库必须要更改密码。

7)ACCOUNT:设置用户的锁定状态,如果设置成LOCK,那么该用户不能访问数据库;如果设置成UNLOCK,那么用户则可以访问数据库。在Oracle 11g中默认的用户状态都为锁定的状态。

利用创建用户的语句,分别创建以口令验证方式的用户和以外部方式验证的用户。

示例1:在SQL*Plus中创建以口令方式验证的用户dba_news_user01

创建一个以口令方式验证的用户dba_news_user01,并且设置成密码立即过期的方式。具体实现代码如下:

CREATE USER dba_news_user01

IDENTIFIED BY abcd

DEFAULT TABLESPACE TS_NEWS_DATA

QUOTA 10M ON TS_NEWS_DATA

TEMPORARY TABLESPACE TEMP

PROFILE dba_news_user01_profile

PASSWORD EXPIRE;

代码解析:

第2行设置用户dba_news_user01的登录口令是abcd。

第3行设置用户dba_news_user01的默认表空间是TS_NEWS_DATA。

第4行设置用户dba_news_user01可以在表空间TS_NEWS_DATA中使用的磁盘限额是10MB。

第5行设置用户dba_news_user01的临时表空间是TEMP。

第6行设置用户dba_news_user01使用的概要文件是dba_news_user01_profile(前提是需要存在这个概要文件)。

第7行设置用户的密码是立即过期状态。

bash 复制代码
SQL> select tablespace_name,status,contents from dba_tablespaces;

TABLESPACE_NAME                STATUS    CONTENTS
------------------------------ --------- ---------------------
SYSTEM                         ONLINE    PERMANENT
SYSAUX                         ONLINE    PERMANENT
UNDOTBS1                       ONLINE    UNDO
TEMP                           ONLINE    TEMPORARY
USERS                          ONLINE    PERMANENT
TS_NEWS_DATA                   ONLINE    PERMANENT

6 rows selected.

SQL> 

SQL> SELECT DISTINCT profile FROM dba_profiles ORDER BY profile;

PROFILE
--------------------------------------------------------------------------------
DEFAULT
GSM_PROF
ORA_STIG_PROFILE

SQL> column profile format a30
SQL> column limit format a30
SQL> set linesize 130
SQL> SELECT * FROM dba_profiles;

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
ORA_STIG_PROFILE               PASSWORD_VERIFY_FUNCTION         PASSWORD ORA12C_STIG_VERIFY_FUNCTION    NO  NO  NO
ORA_STIG_PROFILE               FAILED_LOGIN_ATTEMPTS            PASSWORD 3                              NO  NO  NO
DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD 10                             NO  NO  NO
ORA_STIG_PROFILE               PASSWORD_REUSE_MAX               PASSWORD 10                             NO  NO  NO
ORA_STIG_PROFILE               IDLE_TIME                        KERNEL   15                             NO  NO  NO
ORA_STIG_PROFILE               PASSWORD_LIFE_TIME               PASSWORD 60                             NO  NO  NO
DEFAULT                        COMPOSITE_LIMIT                  KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        SESSIONS_PER_USER                KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        CPU_PER_SESSION                  KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        CPU_PER_CALL                     KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED                      NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
DEFAULT                        LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        IDLE_TIME                        KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        CONNECT_TIME                     KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        PRIVATE_SGA                      KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        PASSWORD_REUSE_TIME              PASSWORD UNLIMITED                      NO  NO  NO
DEFAULT                        PASSWORD_REUSE_MAX               PASSWORD UNLIMITED                      NO  NO  NO
DEFAULT                        PASSWORD_VERIFY_FUNCTION         PASSWORD NULL                           NO  NO  NO
ORA_STIG_PROFILE               PASSWORD_LOCK_TIME               PASSWORD UNLIMITED                      NO  NO  NO
DEFAULT                        INACTIVE_ACCOUNT_TIME            PASSWORD UNLIMITED                      NO  NO  NO
ORA_STIG_PROFILE               INACTIVE_ACCOUNT_TIME            PASSWORD 35                             NO  NO  NO
GSM_PROF                       FAILED_LOGIN_ATTEMPTS            PASSWORD 10000000                       NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
ORA_STIG_PROFILE               PASSWORD_REUSE_TIME              PASSWORD 365                            NO  NO  NO
DEFAULT                        PASSWORD_LOCK_TIME               PASSWORD 1                              NO  NO  NO
DEFAULT                        PASSWORD_GRACE_TIME              PASSWORD 7                              NO  NO  NO
ORA_STIG_PROFILE               PASSWORD_GRACE_TIME              PASSWORD 5                              NO  NO  NO
DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD 180                            NO  NO  NO
GSM_PROF                       COMPOSITE_LIMIT                  KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               COMPOSITE_LIMIT                  KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       SESSIONS_PER_USER                KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               SESSIONS_PER_USER                KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       CPU_PER_SESSION                  KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               CPU_PER_SESSION                  KERNEL   DEFAULT                        NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
GSM_PROF                       CPU_PER_CALL                     KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               CPU_PER_CALL                     KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       LOGICAL_READS_PER_CALL           KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               LOGICAL_READS_PER_CALL           KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       IDLE_TIME                        KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       CONNECT_TIME                     KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               CONNECT_TIME                     KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       PRIVATE_SGA                      KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               PRIVATE_SGA                      KERNEL   DEFAULT                        NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
GSM_PROF                       PASSWORD_LIFE_TIME               PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_REUSE_TIME              PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_REUSE_MAX               PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_LOCK_TIME               PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_GRACE_TIME              PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       INACTIVE_ACCOUNT_TIME            PASSWORD DEFAULT                        NO  NO  NO

51 rows selected.

SQL> create profile dba_news_user01_profile limit password_life_time 30;

Profile created.

SQL> SELECT * FROM dba_profiles;

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
ORA_STIG_PROFILE               PASSWORD_VERIFY_FUNCTION         PASSWORD ORA12C_STIG_VERIFY_FUNCTION    NO  NO  NO
ORA_STIG_PROFILE               FAILED_LOGIN_ATTEMPTS            PASSWORD 3                              NO  NO  NO
DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD 10                             NO  NO  NO
ORA_STIG_PROFILE               PASSWORD_REUSE_MAX               PASSWORD 10                             NO  NO  NO
ORA_STIG_PROFILE               IDLE_TIME                        KERNEL   15                             NO  NO  NO
ORA_STIG_PROFILE               PASSWORD_LIFE_TIME               PASSWORD 60                             NO  NO  NO
DEFAULT                        COMPOSITE_LIMIT                  KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        SESSIONS_PER_USER                KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        CPU_PER_SESSION                  KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        CPU_PER_CALL                     KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED                      NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
DEFAULT                        LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        IDLE_TIME                        KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        CONNECT_TIME                     KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        PRIVATE_SGA                      KERNEL   UNLIMITED                      NO  NO  NO
DEFAULT                        PASSWORD_REUSE_TIME              PASSWORD UNLIMITED                      NO  NO  NO
DEFAULT                        PASSWORD_REUSE_MAX               PASSWORD UNLIMITED                      NO  NO  NO
DEFAULT                        PASSWORD_VERIFY_FUNCTION         PASSWORD NULL                           NO  NO  NO
ORA_STIG_PROFILE               PASSWORD_LOCK_TIME               PASSWORD UNLIMITED                      NO  NO  NO
DEFAULT                        INACTIVE_ACCOUNT_TIME            PASSWORD UNLIMITED                      NO  NO  NO
ORA_STIG_PROFILE               INACTIVE_ACCOUNT_TIME            PASSWORD 35                             NO  NO  NO
GSM_PROF                       FAILED_LOGIN_ATTEMPTS            PASSWORD 10000000                       NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
ORA_STIG_PROFILE               PASSWORD_REUSE_TIME              PASSWORD 365                            NO  NO  NO
DBA_NEWS_USER01_PROFILE        PASSWORD_LIFE_TIME               PASSWORD 30                             NO  NO  NO
DEFAULT                        PASSWORD_LOCK_TIME               PASSWORD 1                              NO  NO  NO
DEFAULT                        PASSWORD_GRACE_TIME              PASSWORD 7                              NO  NO  NO
ORA_STIG_PROFILE               PASSWORD_GRACE_TIME              PASSWORD 5                              NO  NO  NO
DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD 180                            NO  NO  NO
GSM_PROF                       COMPOSITE_LIMIT                  KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               COMPOSITE_LIMIT                  KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        COMPOSITE_LIMIT                  KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       SESSIONS_PER_USER                KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               SESSIONS_PER_USER                KERNEL   DEFAULT                        NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
DBA_NEWS_USER01_PROFILE        SESSIONS_PER_USER                KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       CPU_PER_SESSION                  KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               CPU_PER_SESSION                  KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        CPU_PER_SESSION                  KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       CPU_PER_CALL                     KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               CPU_PER_CALL                     KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        CPU_PER_CALL                     KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       LOGICAL_READS_PER_CALL           KERNEL   DEFAULT                        NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
ORA_STIG_PROFILE               LOGICAL_READS_PER_CALL           KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        LOGICAL_READS_PER_CALL           KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       IDLE_TIME                        KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        IDLE_TIME                        KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       CONNECT_TIME                     KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               CONNECT_TIME                     KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        CONNECT_TIME                     KERNEL   DEFAULT                        NO  NO  NO
GSM_PROF                       PRIVATE_SGA                      KERNEL   DEFAULT                        NO  NO  NO
ORA_STIG_PROFILE               PRIVATE_SGA                      KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        PRIVATE_SGA                      KERNEL   DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        FAILED_LOGIN_ATTEMPTS            PASSWORD DEFAULT                        NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
GSM_PROF                       PASSWORD_LIFE_TIME               PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_REUSE_TIME              PASSWORD DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        PASSWORD_REUSE_TIME              PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_REUSE_MAX               PASSWORD DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        PASSWORD_REUSE_MAX               PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_LOCK_TIME               PASSWORD DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        PASSWORD_LOCK_TIME               PASSWORD DEFAULT                        NO  NO  NO
GSM_PROF                       PASSWORD_GRACE_TIME              PASSWORD DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        PASSWORD_GRACE_TIME              PASSWORD DEFAULT                        NO  NO  NO

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT                          COM INH IMP
------------------------------ -------------------------------- -------- ------------------------------ --- --- ---
GSM_PROF                       INACTIVE_ACCOUNT_TIME            PASSWORD DEFAULT                        NO  NO  NO
DBA_NEWS_USER01_PROFILE        INACTIVE_ACCOUNT_TIME            PASSWORD DEFAULT                        NO  NO  NO

68 rows selected.

SQL>

SQL> create user dba_news_user01
  2  IDENTIFIED BY abcd
  3  DEFAULT TABLESPACE TS_NEWS_DATA
  4  QUOTA 10M ON TS_NEWS_DATA
  5  TEMPORARY TABLESPACE TEMP
  6  PROFILE dba_news_user01_profile
  7  PASSWORD EXPIRE;

User created.

SQL>
SQL> select username,default_tablespace from dba_users;

USERNAME             DEFAULT_TABLESPACE
-------------------- ------------------------------
SYS                  SYSTEM
SYSTEM               SYSTEM
XS$NULL              SYSTEM
SYSBACKUP            SYSTEM
SYSRAC               SYSTEM
SYSKM                SYSTEM
OUTLN                SYSTEM
SYS$UMF              SYSTEM
SYSDG                SYSTEM
DBSNMP               SYSAUX
APPQOSSYS            SYSAUX

USERNAME             DEFAULT_TABLESPACE
-------------------- ------------------------------
DBSFWUSER            SYSAUX
GGSYS                SYSAUX
ANONYMOUS            SYSAUX
GSMADMIN_INTERNAL    SYSAUX
XDB                  SYSAUX
GSMCATUSER           USERS
REMOTE_SCHEDULER_AGE USERS
NT

AUDSYS               USERS
DIP                  USERS

USERNAME             DEFAULT_TABLESPACE
-------------------- ------------------------------
ORACLE_OCM           USERS
GSMUSER              USERS
DBA_NEWS_USER01      TS_NEWS_DATA

23 rows selected.

SQL>
示例2:在SQL*Plus中创建以外部方式验证的用户USER3

创建一个验证方式是外部的用户USER3。

具体代码如下:

CREATE USER USER3

IDENTIFIED EXTERNALLY

DEFAULT TABLESPACE test

QUOTA 5M ON test

PROFILE pro_test;

代码解析:

第2行设置用户USER3的验证方式是外部验证。

第3行设置用户USER3的默认表空间是test。

第4行设置用户USER3在test表空间中能够使用的磁盘配额是5MB。

第5行设置用户USER3所使用的概要文件是pro_test。

示例3:在SQL*Plus中创建以外部方式验证的用户USER3

创建一个验证方式是外部的用户USER3。具体代码如下:

CREATE USER USER3

IDENTIFIED EXTERNALLY

DEFAULT TABLESPACE test

QUOTA 5M ON test

PROFILE pro_test;

代码解析:

第2行设置用户USER3的验证方式是外部验证。

第3行设置用户USER3的默认表空间是test。

第4行设置用户USER3在test表空间中能够使用的磁盘配额是5MB。

第5行设置用户USER3所使用的概要文件是pro_test。

1.1.2.修改用户信息

创建好用户后有时会对用户的设置有所改变,SQL*Plus方式修改已经创建好的用户。

在SQL*Plus中修改用户的语法与创建用户的选项非常类似。具体的语法如下:

ALTER USER user IDENTIFIED

{BY password [REPLACE old_password]

|EXTERNALLY [AS'certificate_DN']

|GLOBALLY [AS ' [directory_DN]']

}

DEFAULT TABLESPACE tablespace

TEMPORARY TABLESPACE {tablespace \| tablespace_group_name}

QUOTA{size_clause \| UNLIMITED}ON tablespace

PROFILE profile

PASSWORD EXPIRE

ACCOUNT{LOCK \| UNLOCK}

参数的具体含义跟上边一样,可以对用户的密码和认证方式、默认的表空间、默认的临时表空间、当前用户使用的表空间的最大值、概要文件、密码过期设置、是否上锁进行修改。

下面利用上面的语法完成三个修改用户信息的操作。

示例1:修改用户dba_news_user01密码,具体语句如下:

ALTER USER dba_news_user01

IDENTIFIED BY newabcd

DEFAULT TABLESPACE test;

示例2:为用户dba_news_user01添加临时表空间,具体语句如下:

ALTER USER dba_news_user01

TEMPORARY TABLESPACE newspace1;

示例3:为用户dba_news_user01设置密码立即过期,具体语句如下:

ALTER USER dba_news_user01PASSWORD EXPIRE;

1.1.3.删除用户

数据库管理员经常会去除一些废弃不用的用户,而删除用户的同时也要把该用户所使用的数据库对象一并删除掉。在SQL*Plus中使用语句删除用户方式讲解。

在SQL*Plus中删除用户

在SQL*Plus中删除用户也是比较简单的,只要知道用户名即可删除,而且是把该用户下所有的数据文件一起删除。具体删除的语法如下

DROP UESR user CASCADE

说明:如果要删除的用户中没有任何数据库对象,那么就可以省略**CASCADE(层叠)**关键字。

二、权限管理

权限管理主要是针对前面讲的用户还有后面要讲解的角色进行管理的,数据库管理员如果要保证数据库的安全就要控制好每一个用户或者角色的权限。本节就将讲述如何授予、撤销以及查询用户或角色的权限。

2.1.什么是权限管理

在Oracle数据库中,权限有系统权限和对象权限两类。系统权限主要是指SESSION权限、USER权限等,也就是说对数据库的系统级的操作都可以称为系统权限。对象权限主要是指表对象、序列、触发器等操作的权限。

2.2.查看用户权限

查询用户权限也是数据库管理员经常要做的工作,由于权限都是针对用户或角色的,这里,只查询用户的权限。在查询权限时都通过用户名去查询该用户权限。

Oracle中的用户权限存放在数据库的数据字典中,用户系统权限存放在数据字典DBA_SYS_PRIVS中,用户的对象权限存放在数据字典DBA_TAB_PRIVS中。

说明:除了可以在DBA_SYS_PRIVS和DBA_TAB_PRIVS数据字典中查询权限之外,还可以直接 在数据字典USER_SYS_PRIVS中查询当前登录用户的系统权限; 在数据字典ALL_TAB_PRIVS中查询当前登录用户的对象权限。

查看当前用户:

-- 查看当前用户的系统权限

select * from user_sys_privs;

-- 查看当前用户的角色权限

select * from user_role_privs

-- 查看当前用户的对象权限

select * from user_tab_privs;

-- 查看当前用户的概要文件

select profile from dba_profiles where profile like 'DBA_NEWS%';

查看指定用户:

-- 查看指定用户的角色权限

SELECT * FROM dba_role_privs where grantee = 'dba_news_user01';

-- 查看指定用户的对象权限

select * from dba_tab_privs;

-- 查看指定用户的概要文件

select profile from dba_profiles where profile like 'DBA_NEWS%';

-- 查看指定用户的系统权限(这里我们用like进行模糊查询,其系统查询的区别重点关注在前缀DBA上)

select grantee,privilege from dba_sys_privs where grantee like '%NEWS%';

bash 复制代码
SQL> column grantee format a20
SQL> column privilege format a20
SQL>
SQL> select grantee,privilege from dba_sys_privs;

GRANTEE              PRIVILEGE
-------------------- --------------------
SYS                  ALTER ANY ANALYTIC V
                     IEW

SYS                  DROP ANY HIERARCHY
DBA                  CREATE ANY HIERARCHY
DBA                  ALTER ANY ATTRIBUTE
                     DIMENSION

DBA                  CREATE ANY ATTRIBUTE
                      DIMENSION
********

753 rows selected.

SQL> select grantee,privilege from dba_sys_privs where grantee like '%NEWS%';

GRANTEE              PRIVILEGE
-------------------- --------------------
DBA_NEWS_USER01      CREATE SESSION

SQL> SELECT * FROM dba_role_privs where grantee = 'dba_news_user01';

no rows selected

SQL>

2.2.授予权限(grant)

授予权限的对象就是用户或者角色,授予权限的操作包括授予系统权限和授予对象权限,在SQL*Plus中如何授予系统权限与对象权限。

在SQL*Plus中授予系统权限:

授予权限的操作一般是由数据库管理员来处理的,只有拥有了足够的权限才能够给其他用户授予权限。

2.2.1.授予系统权限

基本语法如下:

GRANT system_privilege | ALL PRIVILEGES TO { user IDENTIFIED BY password | role} [ WITH ADMIN OPTION]

说明:

1)system_privilege:系统权限名称。

2)ALL PRIVILEGES:可以设置除SELECT ANY DICTIONARY权限之外的所有系统权限。

3){user IDENTIFIED BY password | role | }: 设置权限的对象,user IDENTIFIED BY

password子句代表的是设置指定用户的权限;role代表的是设置角色的权限。

4)WITH ADMIN OPTION:设置该子句后,表示当前给予授权的用户还可以给其他用户进行系统权限的授予 。(注:with grant option,只针对对象层面授权,子子孙孙,无穷尽也)

示例:

grant create session to dba_news_user01;也可以为它加上WITH ADMIN OPTION管理选项,让dba_news_user01也具有授予create session的权限。

具体代码如下:

grant create session to dba_news_user01 with admin option;

2.2.2.授予对象权限

授予对象权限与授予系统权限的语法相似,只是有一点区别。具体语法如下:

GRANT object_privilege | ALL

ON schema.object

TO user | role

WITH ADMIN OPTION

WITH THE GRANT ANY OBJECT

说明:

1)object_privilege:对象权限的名称。

2)ALL:如果选择ALL,则代表授予用户所有的对象权限,这个权限在使用的时候一定要慎重。

3)schema.object:为用户授予对象权限所使用的对象。

4)user | role:user代表的是用户 / role代表的是角色。

5)WITH ADMIN OPTION:设置该子句后,表示当前给予授权的用户还可以给其他用户进行系统授权。

6)WITH THE GRANT ANY OBJECT:设置该子句后,表示当前给予授权的用户还可以给予其他用户对象权限。

示例:在SQL*Plus中授予用户对象权限

利用上面的语句,为用户dba_news_user01授予职工表:employee 查询和删除的权限。

具体代码如下:

grant select,delete on employee to dba_news_user01;

具体操作步骤:

1.在sys用户下创建表employee,并插入几条数据,如下图:

2.为用户dba_news_user01授予职工表:employee 查询和删除的权限。

3.在用户dba_news_user01下查询职工表,需在被授予用户下带上授予用户名

2.3.撤销用户权限(revoke)

撤销权限也叫收回权限,也就是删除用户的系统权限或者对象权限。

2.3.1.撤销系统权限

撤销系统权限的前提是当前的用户已经存在要撤销的系统权限,另外,撤销权限的操作只有数据库管理员才可以操作。

具体语法如下:

REVOKE system_privilege FROM user | role

2.3.2.撤销对象权限

撤销对象权限也使用REVOKE关键字完成。具体语法如下:

REVOKE object_privilege | ALL ON schema.object FROM user | role [CASCADE CONTRAINTS]

这里需要说明的就是CASCADE CONTRAINTS选项,它表示该用户授予其他用户的权限也一并撤销。

示例:撤销用户USER1的对象权限

利用上面的语法,完成撤销用户USER1的DELETE权限。具体代码如下:

REVOKE DELETE ON AA FROM USER1;

说明:在撤销用户权限时,撤销系统权限与撤销对象权限是不同的。如果撤销用户的系统权限,那么该用户授予其他用户的系统权限仍然存在;而撤销了用户的对象权限后,用户授予其他用户的对象权限也同时被撤销了

三、角色管理(像java中的封装 一次创建、多次使用)

角色在数据库中也是非常重要的一个名词,在数据库中角色并不是某个用户所独有的,而是用户可以根据权限的不同授予用户不同的角色。这种概念非常像Java中的封装的概念,该对象不是单独的为一个对象所服务,而是在将不同权限集合打包成一个角色供给其他任一合法用户使用。

试想:同一类型的用户,权限类型几乎相似或则直接就是一致的,叫你创建一百个用户,分别给这几个账户相同的权限,这个时候你要怎么处理呢?手动?

这时候如果要把这些权限封装成一个完整的对象,那么我们在赋权时只需调用这个角色就好了。

数据库中的角色可以授予多个用户也可以不授予用户,并且一个用户可以被授予多个角色。角色是在数据库中由数据库管理员定义的权限集合,方便对不同用户的权限授予。例如,如果在数据库中设置一个拥有能够查询数据库中表的权限的角色,那么凡是用户需要拥有查询数据库中表的权限时,都可以直接授予该角色。

3.1.查询角色

查询角色也是数据库管理员必须要做的工作,在SQL*Plus中查询角色是在数据库的数据字典DBA_ROLE_PRIVS中查询指定用户的角色。

常见的Oracle预定义角色:

  • DBA:拥有所有系统权限,是最高权限角色

  • CONNECT:基本连接权限(CREATE SESSION)

  • RESOURCE:开发人员权限(CREATE TABLE, PROCEDURE等)

  • SELECT_CATALOG_ROLE:查询数据字典的权限

  • EXECUTE_CATALOG_ROLE:执行部分系统包的权限

  • SCHEDULER_ADMIN:作业调度管理权限

3.1.1.查看当前数据库创建的角色信息

-- 查看所有角色(DBA视图)

SELECT role, password_required, authentication_type

FROM dba_roles

ORDER BY role;

-- 查看当前用户可看到的角色

SELECT * FROM user_roles;

-- 查看所有角色的创建时间等信息

SELECT role, created, oracle_maintained

FROM dba_roles

WHERE oracle_maintained = 'N' -- 只看用户创建的角色

ORDER BY created DESC;

3.1.2.查询指定用户的角色

示例:在数据字典DBA_ROLE_PRIVS中查询SYSTEM用户的角色

下面利用DBA_ROLE_PRIVS数据字典查询用户SYSTEM的角色,查询结果如下图所示:

column grantee format a20;

column granted_role format a20;

select * from dba_role_privs;

select * from dba_role_privs where GRANTEE = 'SYSTEM';

3.2.创建角色(包含授予角色本身权限)

在理解了角色是数据库管理员的好帮手之后,掌握在数据库中创建角色是至关重要的。那如何创建角色呢?在SQL*Plus中创建角色分为两个步骤。

3.2.1.创建角色

创建角色就是在数据库中创建一个只有名称的角色。

具体语法如下:

CREATE ROLE role

NOT IDENTIDIED\|IDENTIFIED BY\[password\]\|IDENTIFIED BY EXETERNALLY\|IDENTIFIED BY GLOBALLY

说明:

在创建角色时要注意验证的方式,可以选择的验证方式有四种:

第一种是NOT IDENTIDIED,不需要验证;

第二种是IDENTIFIED BY[password],这是口令验证的方式;

第三种是IDENTIFIED BY EXETERNALLY, 这是外部验证的方式;

第四种是 IDENTIFIED BY GLOBALLY,这是全局验证方式。

3.2.2.授予角色权限

授予角色权限与授予用户权限所使用的语法一样,只是授予对象不是用户而是角色。授予角色系统权限的语法和授予角色对象权限的语法不同。

授予角色系统权限具体语法如下:

GRANT system_privilege | ALL PRIVILEGES TO role [WITH ADMIN OPTION]

在给角色授予权限时,数据库管理员必须拥有GRANT_ANY_PRIVIEGES权限才可以给角色赋予任何权限

示例:

-- 创建不需要密码的角色

CREATE ROLE clerk;

-- 创建需要密码的角色

CREATE ROLE manager IDENTIFIED BY manager123;

-- 创建外部认证角色

CREATE ROLE app_user IDENTIFIED EXTERNALLY;

实例:在SQL*Plus中创建角色

下面就利用上面的两个步骤来创建角色testrole,并给角色授予CREATE SESSION权限。具体代码如下:

CREATE ROLE testrole NOT IDENTIFIED;

GRANT CREATE SESSION TO testrole;

这样,就在数据库中创建了一个拥有CREATE SESSION的角色TESTROLE。用户可以根据创建角色的步骤,创建不同验证方式和授予不同权限的角色。

bash 复制代码
SQL> CREATE ROLE testrole NOT IDENTIFIED;

Role created.

SQL> GRANT CREATE SESSION TO testrole;

Grant succeeded.

SQL> desc dba_role_privs
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 GRANTEE                                            VARCHAR2(128)
 GRANTED_ROLE                                       VARCHAR2(128)
 ADMIN_OPTION                                       VARCHAR2(3)
 DELEGATE_OPTION                                    VARCHAR2(3)
 DEFAULT_ROLE                                       VARCHAR2(3)
 COMMON                                             VARCHAR2(3)
 INHERITED                                          VARCHAR2(3)

SQL> desc dba_roles
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ROLE                                      NOT NULL VARCHAR2(128)
 ROLE_ID                                   NOT NULL NUMBER
 PASSWORD_REQUIRED                                  VARCHAR2(8)
 AUTHENTICATION_TYPE                                VARCHAR2(11)
 COMMON                                             VARCHAR2(3)
 ORACLE_MAINTAINED                                  VARCHAR2(1)
 INHERITED                                          VARCHAR2(3)
 IMPLICIT                                           VARCHAR2(3)
 EXTERNAL_NAME                                      VARCHAR2(4000)

SQL> column role format a20
SQL> column external_name format a20
SQL> select * from dba_roles where role = 'testrole';

no rows selected

SQL> select * from dba_roles where role = 'TESTROLE';

ROLE                    ROLE_ID PASSWORD AUTHENTICAT COM O INH IMP
-------------------- ---------- -------- ----------- --- - --- ---
EXTERNAL_NAME
--------------------
TESTROLE                     76 NO       NONE        NO  N NO  NO

SQL>

3.3.修改角色

角色创建完成后,如果想要修改其内容,可以修改角色中已经授予的角色以及权限。在SQL*Plus中修改角色的语法如下:

ALTER ROLE role

NOT IDENTIDIED \| IDENTIFIED BY \[password\] \| IDENTIFIED BY EXETERNALLY \| IDENTIFIED BY GLOBALLY

上面的语法只是修改角色本身,如果修改已经授予角色的权限或者角色,则要使用GRANT或者REVOKE来完成。

3.4.删除角色

如果要移除不用的角色,可以在企业管理器中删除角色,也可以在SQL*Plus中删除角色。下面就分别讲解用这两种方式删除角色

在SQL*Plus中删除角色也是非常容易的,删除角色的语法如下:

DROP.ROLE rolename

这里,rolename就是数据库中要删除的角色名称。

相关推荐
Jelly-小丑鱼2 小时前
Linux搭建SQLserver数据库和Orical数据库
linux·运维·数据库·sqlserver·oracal·docker容器数据库
JIngJaneIL2 小时前
基于springboot + vue健康管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端
秋饼2 小时前
【三大锁王争霸赛:Java锁、数据库锁、分布式锁谁是卷王?】
java·数据库·分布式
EkihzniY2 小时前
二要素认证:eSIM开户的安全基石
安全
电商API&Tina2 小时前
【电商API接口】关于电商数据采集相关行业
java·python·oracle·django·sqlite·json·php
汽车仪器仪表相关领域2 小时前
GZCVL T-II 安全防坠器测试系统
功能测试·测试工具·安全·单元测试·压力测试·可用性测试
zhcf2 小时前
【MySQL】聚簇索引与非聚簇索引
数据库·mysql
乾元2 小时前
AI 驱动的入侵检测与异常会话判别:从规则到行为分析前言:从“捕获敌人”到“守卫秩序”
运维·网络·人工智能·网络协议·安全
小帅学编程3 小时前
JDBC学习
数据库·学习·oracle