Oracle用户、权限、角色管理

一、用户管理

1、创建用户

1.1 创建用户user1,密码为123456,指定默认表空间为user1_tbs,临时表空间为user1_temp

# user1_tbs表空间和user1_temp临时表空间需要提前创建好。
# 创建表空间user1_tbs
SQL> create tablespace user1_tbs
datafile '/u01/app/oracle/oradata/ORCL/datafile/user1.dbf' size 10M
autoextend on next 10M
maxsize 100M;

# 创建临时表空间user1_temp
SQL> create temporary tablespace user1_temp
tempfile '/u01/app/oracle/oradata/ORCL/datafile/user1_temp.dbf' size 10M;

# 创建user1用户
SQL> create user user1 identified by "123456"
default tablespace user1_tbs
temporary tablespace user1_temp;

注意:在创建用户时,不指定的情况下,默认表空间为USERS,临时表空间为TEMP

1.2 创建用户user2时设置密码过期,让用户初次登录必须要修改密码

# 创建user2用户
SQL> create user user2 identified by "123456"
password expire;
# 刚创建的用户没有登录权限,需要有create seesion权限
grant create session to user2
# 测试登录user2
SQL> conn user2/123456
ERROR:
ORA-28001: the password has expired
Changing password for user2
New password:    # 输入密码
Retype new password:   # 再次输入密码
Password changed
Connected.

SQL> conn user2/1234    # 再次登录
Connected.

1.3 创建用户时限制配额

SQL> create user user3 identified by "123456"
default tablespace user3_tbs
temporary tablespace user3_temp
quota 10M on user3_tbs;

注意:

1、如果建立用户时没有为表空间指定QUOTA子句,那么用户在特定表空间上的配额为0,用户将不能在相应的表空间上建立数据对象。

2、要设置用户在指定表空间上不受限制,可以使用QUOTA UNLIMITED ON tablespace_name子句。

2、查看用户

与用户相关的视图:

dba_users :可以查询数据库中所有用户信息

2.1 查看dba_users数据字典的结构

如果不知道查用户什么信息,可以先查看数据结构信息

SQL> desc dba_users;

2.2 查看所有用户信息的主要信息

SQL> select username,default_tablespace,temporary_tablespace 
from dba_users;

2.3 查看特定用户信息

SQL> select username,default_tablespace,temporary_tablespace 
from dba_users
where username='USER1';

2.4 查看用户过期时间,最近登录时间

SQL> select username,account_status,expiry_date,last_login 
from dba_users 
where username='USER2';

2.5 查看特权用户信息

select username,sysdba,sysoper,sysbackup 
from v$pwfile_users;

3、修改用户

2.1 修改用户密码S

SQL> alter user user2 identified by "1234";

2.2 锁定用户或解锁用户

# 锁定用户:将user2锁定
SQL> alter user user2 account lock;

# 连接登录时,显示账号被锁
SQL> conn user2/123456 
ERROR:
ORA-28000: the account is locked


Warning: You are no longer connected to ORACLE.
# 注意:此时没有连接到用户,需要重新登录到sys用户
SQL> alter user user2 account unlock;
SP2-0640: Not connected
SQL> conn sys/xxx as sysdba
Connected.

# 解锁用户:将user2用户解锁
SQL> alter user user2 account unlock;

User altered.

# 连接成功
SQL> conn user2/123456
Connected.

3.3 将用户密码设置为过期

SQL> alter user user1 password expire;
 # 再次登录会发现密码过期,要求重新设置密码
SQL> conn user1/1234
ERROR:
ORA-28001: the password has expired


Changing password for user1
New password: 
Retype new password: 
Password changed
Connected.

3.4 修改默认表空间

# 将user1的默认表空间修改为liyb表空间
SQL> alter user user1 default tablespace liyb;

# 查看user1用户的默认表空间是否改变
SQL> select username,default_tablespace from dba_users where username ='USER1';

3.5 修改用户空间配额

# 当用户配额消耗完,可以给用户添加配额
SQL> alter user user1 quota 100M on liyb;
# 查看表空间配额
SQL> SELECT tablespace_name, bytes/10.24/1024 as MB, max_bytes 
FROM dba_ts_quotas 
where tablespace_name='LIYB';

4、删除用户

SQL> drop user liyb;
 # CASCADE:级联删除
 # 如果用户包含数据对象,则必须使用cascade进行删除
SQL> drop user xxx cascade;

二、权限管理

用户创建之后并没有操作数据库的权限,仅表示该用户在Oracle上进行了注册。需要有操作权限,需要具有DBA权限的用户对其进行授权

1、系统权限和对象权限

系统权限:用户在数据库范围内能够执行某种操作,是在系统级对数据库进行存取和使用的机制。例如,用户是否能够连接到数据库系统(SESSION权限)上,以及是否能够执行系统级的DDL语句(如CREATE、ALTER和DROP)等。

对象权限:是指某一个用户对其他用户的表、视图、序列、存储过程、函数、包等进行操作的权限。不同类型的对象具有不同的对象权限,对于某些模式对象,如簇、索引、触发器、数据库链接等没有相应的实体权限,这些权限由系统权限进行管理。

2、授权给用户

刚创建的用户直接登录,会出现以下报错

SQL> conn user1/1234
ERROR:
ORA-01045: user USER1 lacks CREATE SESSION privilege; logon denied

Warning: You are no longer connected to ORACLE.

2.1 查看Oracle具有的所有权限

SQL> select name,privilege from system_privilege_map;

2.2 给用户授权系统权限

SQL> grant create session,create table,create view to user1;
SQL> grant create user,create session,create table,create view,create procedure to user2  with admin option;  

with admin option:表示被授权者可以将权限再授予其他用户,如果被授权者将权限授予给另外一个用户后,自身的权限被回收,并不影响另外一个用户的权限。

2.3 给用户授权对象权限

# 将scott用户的emp表相关权限授权给user1
SQL> grant alter,excute,insert,update,select,delete on scott.emp to user1;

# 授权给user2同时,让其有授权给其他用户权限
SQL> grant alter,excute,insert,update,select,delete on scott.emp to user2 
with grant option;

with grant option:可以将已拥有的权限授予其他用户。如果将权限授权给其他用户,权限被回收后,其他用户也无法使用该权限。

3、查看授权信息

3.1 与权限相关的数据字典

dba_users:数据库层面的用户基本信息,可以查所有用户信息

dba_sys_privs:已授予用户或角色的系统权限

user_sys_privs:当前用户所拥有的系统权限

dba_tab_privs:数据库的对象权限信息

user_tab_privs:当前用户所拥有的对象权限

user_tables:查看当前用户创建的所有表信息

all_tables:数据库上所有的表信息

3.2 查询用户所拥有的系统权限

# 在sys用户下查看user1具有的系统权限
SQL> select privilege from dba_sys_privs where grantee='USER1';

# 在当前用户下查看user2具有的系统权限
SQL> conn user2/123456
SQL> select privilege from user_sys_privs;

3.3 查询用户所拥有的对象权限

# 在sys用户下查看user1的对象权限
SQL> select table_name,owner,privilege from dba_tab_privs where grantee='USER1';
# 在user2用户下查看对象权限
SQL> conn user2/123456
SQL> select table_name,privilege from user_tab_privs;

4、回收权限

4.1 回收系统权限

SQL> revoke create session,create table,create view from user1;

4.2 回收对象权限

SQL> revoke alter,excute,insert,update,select,delete on scott.emp from user1;

三、角色

1、角色与用户,权限的关系

角色是一个独立的数据库实体,它包括一组权限。角色是权限的集合,角色可以被授予任何用户,也可以从任何用户收回。角色是用于简化权限的管理。

2、管理角色

2.1 创建角色

# 创建角色,不使用密码

SQL> create role role_1;

# 创建带有密码的角色
SQL> create role role_2 identified by "123456";

2.2 将权限授予角色

SQL> grant create session,create table to role_1;
SQL> grant create session,create table,create view to role_2;

2.3 将角色授权给用户

SQL> grant role_1 to user1;
SQL> grant role_2 to user2;

2.4 查看用户权限

与角色相关的数据字典:

dba_role_privs:数据库上所有用户的角色

role_sys_privs:当前用户所拥有的角色权限

# 在sys用户下看
SQL> select granted_role from dba_role_privs where grantee ='USER1';
# 进入user1用户,查看当前权限
SQL> select granted_role from user_role_privs ;

2.5 修改角色密码

# 修改
SQL> alter role role_2 identified by "1234"; 
SQL> alter role role_2 not identified;

2.6 删除角色

SQL> drop role role_1;
相关推荐
心灵彼岸-诗和远方1 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘1 小时前
NFS服务器
运维·服务器
Ai 编码助手1 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员1 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle1 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻1 小时前
MySQL排序查询
数据库·mysql
萧鼎1 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^2 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋32 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
荒川之神2 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle