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;
相关推荐
Access开发易登软件4 分钟前
Access开发实战:绘制漏斗图实现业务转化分析
数据库·信息可视化·html·vba·图表·access
KingRumn5 分钟前
Linux进程间通信System V IPC 与 POSIX IPC 跨平台兼容性分析
linux·运维
云老大TG:@yunlaoda3608 分钟前
开通华为云国际站代理商的UCS服务需要哪些资质?
大数据·数据库·华为云·云计算
总有刁民想爱朕ha12 分钟前
Windows Server 2019部署MySQL 8教程
数据库·windows·mysql
纪伊路上盛名在13 分钟前
记1次BioPython Entrez模块Elink的debug
前端·数据库·python·debug·工具开发
程序员水自流16 分钟前
MySQL数据库自带系统数据库功能介绍
java·数据库·mysql·oracle
旧梦吟20 分钟前
脚本网页 三人四字棋
前端·数据库·算法·css3·html5
乾元22 分钟前
基于时序数据的异常预测——短期容量与拥塞的提前感知
运维·开发语言·网络·人工智能·python·自动化·运维开发
梓仁沐白22 分钟前
操作系统:进程通信和死锁
linux·服务器·网络
小光学长24 分钟前
基于ssm的考研复习平台w0ws1848(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库