创建用户:
语法:
CREATE USER 用户名 IDENTIFIED BY 密码[DEFAULT TABLESPACE 表空间名称][TEMPORARY TABLESPACE 临时表空间表名][QUOTA 数字[K|M] UNLIMITED ON表空间名 QUOTA 数字[K|M] UNLIMITED ON表空间名 ...][PROFILE 概要文件名称 | DEFAULT][PASSWORD EXPIRE][ACCOUNT LOCK | UNLOCK]
如下:
[]的部分可以省略CREATE USER 用户名 IDENTIFIED BY 密码:创建用户同时设置密码,但是用户名和密码不能是Oracle中保留字,也不能是数字开头,如果要设置成数字需要将数字使用"声明如''99977''DEFAULT TABLESPACE 表空间名称:用户存储默认使用的表空间,当用户创建对象没设置表空间时,就将保存在此处指定的表空间下,TEMPORARY TABLESPACE 表空间名:用户所使用的临时表空间QUOTA 数字[K|M] UNLIMITED ON表空间名:用户在表空间上的使用限额,可以指定多个表空间的限额 ,如果设置为UNLIMITED,则表示不设置限额PROFILE:概要文件名称|DEFAULT:用户操作的资源文件,如果不指定则使用默认的配置资源文件PASSWORD EXPIRE:用户密码失效,则在第一次使用时,必须修改密码ACCOUNT LOCK |UNLOCK:用户是否为锁定状态,默认为UNLOCK。需要管理员来创建用户
创建一个用户:
CREATE USER te IDENTIFIED BY te --创建用户te密码teDEFAULT TABLESPACE tbs_test --默认表空间tbs_testTEMPORARY TABLESPACE temp; --临时表空间temp;
创建另一个用户
CREATE USER oracletest --创建用户oracletestIDENTIFIED BY oracletest --密码:oracletestDEFAULT TABLESPACE tbs_test --默认表空间:tbs_test TEMPORARY TABLESPACE temp --临时表空间 tempQUOTA 8M ON tbs_test --在tbs_test表空间上最多使用8MQUOTA 20M ON USERS --在users表空间上最多使用8MACCOUNT UNLOCK --用户默认为活动账户,UNLOCK为活动,LOCK为锁定 PASSWORD EXPIRE; --用户第一次登录后要强制修改密码
创建完用户直接登录会提示:
ORA-01045:user te或者oracletest lacks create session privilege;logon denied
提示用户没有连接数据库的权限
分配权限有2种方式:
- 直接将权限分配给用户 --由于权限比较多不推荐
- 为用户授予角色 --推荐使用
Oracle中预定义了一些角色:
NO | 预定义角色 | 描述 |
1 | EXP_FULL_DATABASE | 导出数据库权限 |
2 | IMP_FULL_DATABASE | 导入数据库权限 |
3 | SELECT_CATALOG_ROLE | 查询数据字典的权限 |
4 | EXCUTE_CATALOG_ROLE | 数据字典上的执行权限 |
5 | DELETE_CATALOG_ROLE | 数据字典上的删除权限 |
6 | DBA | 系统管理员相关权限 |
7 | CONNECT | 授予用户最典型的权限连接权限 |
8 | RESOURCE | 授予开发人员的权限 |
CONNECT角色权限;
CREATE SESSION | 连接数据库 |
RESOURCE角色权限
CREATE TRIGGER | 创建触发器 |
CREATE SEQUENCE | 创建序列 |
CREATE TABLE | 创建建立表 |
CLUSTER | 创建簇 |
CREATE PROCEDURE | 创建存储过程 |
CREATE TYPE | 创建类型 |
一般开发人员使用授予CONNECT 和RESOURCE角色
- 为用户授予角色:
GRANT CONNECT,RESOURCE TO te;GRANT CONNECT,RESOURCE TO oracletest;
这里使用创建的用户就可以登录并连接到数据库了
- 维护用户:
- 修改用户密码:
ALTER USER 用户名 IDENTIFIED BY 新密码
ALTER USER oracletest IDENTIFIED BY test
2. 控制用户锁定
ALTER USER 用户名 ACCOUNT LOCK | UNLOCK
将oracletest设置为锁定
ALTER USER oracletest ACCOUNT LOCK
此时用oracle是不能登录和连接数据库的
将oracletest设置为解锁
ALTER USER oracletest ACCOUNT UNLOCK
3. 让密码失效
ALTER 用户名 PASSWORD EXPIRE
将oracletest用户密码失效
ALTER oracletest PASSWORD EXPIRE
此时用oracletest用户登录时,会提示用户修改密码
4.修改表空间的配额
ALTER USER 用户名 QUOTA 数字[K|M] UNLIMITED ON 表空间名称
修改oracletest的表空间配额
ALTER USER oracle QUOTA UNLIMITED ON tbs_test
删除用户:
DROP USER 用户名 [CASCADE]CASCADE子句删除模式中的所有对象
删除oracletest用户
DROP USER oracletest
授予角色:
GRANT 角色名,角色名,... TO 用户名
GRANT CONNECT,RESOURCE TO te;GRANT CONNECT,RESOURCE TO oracletest;
回收角色:
REVOKE 角色名,角色名.. FROM 用户名
REVOKE CONNECT,RESOURCE TO te;REVOKE CONNECT,RESOURCE TO oracletest;
创建角色:
CREATE ROLE 角色名[NOT IDENTIFIED |IDENTIFIED BY密码]
NOT IDENTIFIED 没有密码
IDENTIFIED BY 密码
创建一普通角色:
CREATE ROLE NOTEST;
查看DBA_ROLES字典查看角色是否创建成功和状态
SELECT * FROM dba_roles WHERE ROLE='NOTEST';
角色授权:
GRANT CREATE SESSION ,CREATE TABLE TO NOTEST;连接和创建表的权限授予角色
查询role_sys_privs数据字典,状态都有哪些权限
SELECT * FROM role_sys_privs
WHERE role='NOTEST'
ORDER BY ROLE;
找到我们的角色查看权限
禁用当前会话中的所有角色
SET ROLE NONE;
启用当前会话中的所有角色
SET ROLE ALL;
删除角色:
DROP ROLE 角色名;
删除notest角色
DROP ROLE NOTEST;