创建用户:
语法:
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;
