DCL
SQL语句分为三类:DML/DDL/DCL,DCL主要表示的是数据库的控制语句,控制就是操作权限,而在DCL之中,主要有两个语法:GRANT,REVOKE
权限的操作基础需要有用户,我们来创建一个新用户,创建新用户必须是具备管理员权限的SYS,SYSTEM两个用户操作。
切换到SYS用户
CONN SYS/ORACLE AS SYSDBA;
创建一个haha用户,密码为oracle
CREATE USER haha IDENTIFIED BY oracle;
使用haha用户进行登陆
conn haha/oracle;
执行该登陆后返回以下错误:
ORA-01045: user HAHA lacks CREATE SESSION privilege; logon denied
提示用户没有创建会话的权限
授权该权限给haha用户
conn sys/oracle as sysdba;
grant create session to haha;
再次使用haha用户进行连接
conn c##haha/oracle;
登陆成功后,使用create创建一张表
CREATE TABLE MYTAB(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50)
);
提示如下错误:
ORA-01031: insufficient privileges
关于数据表的保存问题
在oracle之中所有的数据表都是保存在硬盘上,但是不是每一张表都保存在硬盘上,而是表空间保存在硬盘上,数据表保存在表空间中。
给haha用户创建表的权限
conn sys/oracle as sysdba;
grant create table to c##haha;
再次使用haha用户进行创建表
CREATE TABLE MYTAB(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50)
);
如果仍然没有权限,执行以下命令
GRANT CONNECT,RESOURCE TO c##haha;
当管理员创建了用户以后就存在了用户的管理。
修改用户密码
ALTER USER c##HAHA IDENTIFIED BY Oracle;
重置密码后让用户在第一次登陆的时候可以修改密码
ALTER USER HAHA PASSWORD EXPIRE;
下次登陆的时候会返回如下提示:
ORA-28001: the password has expired
锁定用户
ALTER USER HAHA ACCOUNT LOCK;
再次登陆的时候会返回如下提示:
ORA-28000: the account is locked
解锁一个用户
ALTER USER HAHA ACCOUNT UNLOCK;
不同的用户可以访问其他用户的数据表,使用完整的“用户名.表名称”即可。
使用haha用户访问scott用户的emp表;
SELECT * FROM SCOTT.EMP;
返回如下错误提示:
ORA-00942: table or view does not exist
此时,需要将scott用户的权限授予haha用户才可以让其访问emp表,主要权限有四个:
增:INSERT
删:DELETE
改:UPDATE
查:SELECT
使用系统用户将scott.emp表的SELECT/INSERT权限授予haha用户
GRANT SELECT,INSERT ON SCOTT.EMP TO HAHA;
回收权限
REVOKE SELECT,INSERT ON SCOTT.EMP from HAHA;
回收所有权限
REVOKE CONNECT,RESOURCE,CREATE TABLE,CREATE SESSION FROM HAHA;
删除haha用户
DROP USER HAHA;
提示以下错误信息:
ORA-01922: CASCADE must be specified to drop ‘HAHA’
必须指定级联删除才可以;
指定级联删除
DROP USER HAHA CASCADE;
速度相对于创建慢了很多。