14.oracle DCL和TCL语句

本文详细介绍了Oracle数据库中的DCL(DataControlLanguage)语句,包括创建、修改和删除用户,以及设置和管理用户权限和角色。内容涵盖用户账户的锁定与解锁、权限的赋予与回收,以及系统和自定义角色的创建与删除。此外,还讨论了用户、角色与权限之间的关系,强调了事务处理的ACID属性和TCL(TransactionControlLanguage)关键字,如COMMIT、ROLLBACK和SAVEPOINT在事务管理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DCL语句--数据控制语句

--创建用户同时设置密码:
CREATE USER USER_NAME IDENTIFIED BY PASSWORD;
--修改用户登录密码
alter user user_NAME IDENTIFIED BY PASSWORD;
--锁定用户
alter USER USER_NAME ACCOUNT LOCK;
--解锁用户
alter USER USER_NAME ACCOUNT UNLOCK;
--在进行创建用户时,使用sys或其他管理员用户登录
注意:
/*1.用户名不区分大小写,在创建、删除、登录用户时可以任意使用大小写;密码严格区分大小写,
    无论在创建用户、修改密码还是登录时都要注意
  2.此时仅仅是在数据库中注册了用户,但没有任何权限,甚至登录数据库的权限都没有
  3.每个用户下有自己各自的内容,互相之间不能直接访问,管理员用户可以直接访问其他用户的内容
  4.普通用户间可以通过赋予权限实现互相访问*/
  

--为用户添加权限:
GRANT PRIVILEGE TO USER_NAME;  --PRIVILEGE权限名

--为用户添加创建会话(连接数据库)的权限
GRANT CREATE SESSION TO USER_NAME; --仅能连接数据库 

--为用户添加查询某表的权限(所有者用户执行)
GRANT SELECT ON USER1.TB_NAME TO USER2;  

--为用户添加基础连接角色CONNECT和基础资源角色RESOURCE
GRANT CONNECT,RESOURCE TO USER_NAME;

--为用户添加管理员角色DBA    
GRANT DBA TO USER_NAME;

CONNECT:该角色具有连接数据库的权限
RESOURCE:该角色具有数据库的基本角色,包括查询对象、部分对象的创建修改删除
DBA:数据库管理员,拥有数据库的最高权限

--收回用户权限:
REVOKE PRIVILEGE FROM USER_NAME;

--删除用户; 
DROP USER USER_NAME;--用户下无任何对象
DROP USER USER_NAME CASCADE; --连同用户下的对象一并删除

--数据字典
SELECT * FROM DBA_USERS; --查询所有用户

--注意:
--在数据字典中,所有用户的用户名都是以大写格式存储的,查询时要注意

DCL --角色
带有一系列权限的集合。
--作用:
用户被赋予某角色,相当于同时被赋予了该角色下的所有权限

分类:
---系统角色:数据库自带角色
---自定义角色:用户根据自身实际需求,自行创建的角色

--创建角色:
CREATE ROLE ROLE_NAME;
--赋予角色权限和赋予用户权限语法一致
--删除角色:
DROP ROLE ROLE_NAME;

给用户赋予角色或从用户收回角色:与赋予权限或收回权限的语法一致
GRANT SELECT ON SCOTT.EMP TO ROLE74;
GRANT CREATE TABLE TO ROLE74;
GRANT ROLE_NAME TO ROLE74;

CREATE USER LISI IDENTIFIED BY LISI;

查询角色拥有的权限:
--对象权限:如查询数据、增加数据、删除数据等
SELECT * FROM DBA_TAB_PRIVS; 
系统权限:如创建表、删除索引、连接数据库等
SELECT * FROM DBA_SYS_PRIVS; 
注意点:
/*
1.通过角色赋予给用户的权限,不能通过【查询某用户具有的权限】查到;只有直接赋予给用户的权限,
  才能通过【查询某用户具有的权限】查到
2.想要确定某个用户到底有什么权限,一方面需要直接查询该用户下有哪些权限,另一方面需要查询该用户下所拥
  有的的角色具有什么权限
3.想要赋予权限给用户,可以直接将该权限赋予给用户,或将具有该权限的角色赋予给用户*/

查询某用户下具有的所有对象权限:
SELECT T.PRIVILEGE,T.OWNER,T.TABLE_NAME FROM DBA_TAB_PRIVS T WHERE T.GRANTEE = 'USER_NAME'
UNION 
SELECT T.PRIVILEGE,T.OWNER,T.TABLE_NAME FROM DBA_TAB_PRIVS T WHERE T.GRANTEE IN 
     (SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS T WHERE T.GRANTEE = ' USER_NAME ');
     
查询某用户下具有的所有系统权限:

SELECT T.PRIVILEGE FROM DBA_SYS_PRIVS T WHERE T.GRANTEE = ' USER_NAME '
UNION 
SELECT T.PRIVILEGE FROM DBA_SYS_PRIVS T WHERE T.GRANTEE IN (SELECT GRANTED_ROLE FROM 
       DBA_ROLE_PRIVS T WHERE T.GRANTEE = ' USER_NAME ');

DCL --用户、角色与权限的关系
/*
用户:数据库的使用者,比如SYS、SCOTT
权限:指能否在数据库中做某种操作,比如创建表、查询数据
角色:带有一系列权限的集合,拥有角色,即拥有该角色下所有的权限,比如CONNECT,RESOURCE,DBA
*/

系统权限:
  ADMINISTER DATABASE TRIGGER:允许管理数据库级别的触发器。
  ALTER DATABASE:允许更改数据库的属性,如字符集、时区等。
  CREATE ANY DIRECTORY:允许创建任意目录对象。
  CREATE ANY JOB:允许创建任意作业对象。
  CREATE ANY LIBRARY:允许创建任意共享库对象。
  CREATE ANY PROCEDURE:允许创建任意存储过程对象。
  CREATE ANY TABLE:允许创建任意表格对象。
  CREATE ANY VIEW:允许创建任意视图对象。
  CREATE SESSION:允许用户连接到数据库。
  CREATE USER:允许创建新的数据库用户。
  DROP ANY DIRECTORY:允许删除任意目录对象。
  DROP ANY JOB:允许删除任意作业对象。
  DROP ANY LIBRARY:允许删除任意共享库对象。
  DROP ANY PROCEDURE:允许删除任意存储过程对象。
  DROP ANY TABLE:允许删除任意表格对象。
  DROP ANY VIEW:允许删除任意视图对象。
  EXEMPT ACCESS POLICY:允许豁免访问策略。
  GRANT ANY OBJECT PRIVILEGE:允许授予任意对象权限。
  SELECT ANY DICTIONARY:允许访问数据字典视图。
  select any table:    允许查询所有表
对象权限:
  ALTER:允许修改表格或视图的结构。
  DELETE:允许删除表格中的行。
  INDEX:允许创建和删除索引。
  INSERT:允许向表格中插入行。
  REFERENCES:允许在外键关系中引用此表格。
  SELECT:允许查询表格中的行。
  UPDATE:允许更新表格中的行。
  EXECUTE:允许执行存储过程或函数。
  FLASHBACK:允许使用闪回功能。
  
--要授予对象权限给其他用户,可以使用GRANT语句。GRANT语句的语法如下:
GRANT privilege_list ON object_name TO user_name;
--privilege_list是要授予的权限列表,可以是单个权限或多个权限的组合,多个权限之间用逗号分隔。
--object_name是要授予权限的对象名称,可以是表格、视图、存储过程等。
--user_name是要授予权限给哪个用户或角色。

例如
GRANT SELECT, UPDATE ON employees TO john;

收回对象权限,可以使用REVOKE语句。REVOKE语句的语法如下:
REVOKE privilege_list ON object_name FROM user_name;
--privilege_list、object_name和user_name的含义与GRANT语句相同。
例如
REVOKE SELECT, UPDATE ON employees FROM john;



=======================================TCL====================================================
              
事务:/*为了完成某项业务(任务、操作),由一系列看得见的SQL或看不见的后台进程组成的一系列逻辑工作单元。
       整个事务在处理过程中一直处于未提交状态,直到全部过程执行成功才可以被提交,若中间某步出现错误,则整个事
       务会全部回滚到事务执行之前的状态并报错。*/

事务的四个属性(统称ACID)
    1.原子性:事务是一个整体的工作单元,要么全部执行,要么全部取消。某一步执行失败,则全部回滚。
    2.一致性:所有相关数据必须保持状态一致,以保持数据的完整性,若事务执行成功,所有相关数据全部变为新状态,若失败,所有相关数据处于原始状态。
    3.隔离性:当前事务在进行数据修改时,其他事务只能查看修改之前的状态,等到当前事务执行结束(提交后),数据的修改才能被看到。
    4.持久性:事务提交后,所做的修改就会永久保存,直到下一次事务来改变它。

TCL关键词:
COMMIT; --事务提交  
ROLLBACK; --事务回滚
SAVEPOINT; --保存点
–在接下来的DML操作可能有风险的情况下在DML过程中使用
保存点语法
设立保存点:
SAVEPOINT SP_NAME;

回滚到某保存点:
ROLLBACK TO SAVEPOINT SP_NAME;

事务的提交和回滚:
    显式提交:由COMMIT决定是否提交当前事务,例如DML语句中的 
              INSERT UPDATE DELETE ;
    隐式提交:一旦整个事务执行成功,ORACLE会自动提交该事务,例如:
              CREATE ALTER DROP GRANT REVOKE ;
    自动回滚:一旦事务进行过程中出现任何错误,ORACLE会自动回滚当前事务。

--数据库关闭
SHUTDOWN [NORMAL|TRANSACTION|IMMEDIATE|ABORT]
          NORMAL: 正常关闭方式(默认)
          阻止新用户连接并等待已连接用户主动断开连接后关闭
          TRANSACTION: 事务关闭
          阻止新用户连接和新事务,等待所有事务提交完,用户断开连接后关闭
          IMMEDIATE: 立即关闭方式(常用)
          立即终止当前用户连接,强行停止并回退事务,关闭数据库
          ABORT: 终止关闭方式(慎用)
          具有强制性和一定的破坏性

数据库启动
STARTUP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值