1、用户类型
登录时可以选择的三种账户类型:sysdba,sysoper,normal 。
账户 | 描述 | 功能 |
sysdba | 数据库管理员 | 打开数据库服务器,关闭数据库服务器,备份数据库,恢复数据库,日志归档,会话限制,管理功能,创建数据库 |
sysoper | 数据库操作员 | 打开数据库服务器,关闭数据库服务器, 备份数据库,恢复数据库,日志归档,会话限制 |
normal | 普通用户 | 任何权限(只有通过被授权之后才可以对数据库进行操作) |
2、默认账户
用户名 | 密码 | 类型 | 描述 |
sys | 安装时设置 | sysdba, sysoper | 级别最高的账户 |
sysdba | 安装时设置 | sysdba | 级别最高的账户 |
system | 安装时设置 | normal | 虽然是普通用户,但拥有dba角色 |
3、创建账户
3.1创建用户
sql格式: CREATE USER 用户名 IDENTIFIED BY 密码; 例如:CREATE USER nowashing IDENTIFIED BY yujinxiang; 创建了一个用户,用户名是nowashing密码是yujinxiang。 |
3.2修改任意用户密码
sql格式: ALTER USER 用户名 IDENTIFIED BY 密码; 例如:ALERT USER scott IDENTIFIED BY tiger; 将scott的密码修改为tiger。 |
3.3修改当前用户的密码
sql格式: ALTER USER 用户名 IDENTIFIED BY 新密码 REPLACE 旧密码; |
3.4删除用户
sql格式: DROP USER 用户名(CASCADE级联删除拥有对象) 例如:DROP USER nowashing; 删除掉nowashing这个用户,以及这个用户所拥有的所有的数据对象(权限,表,视图,存储过程……)。 |
3.5查询所有用户
SELECT * FROM all_users; |
4、授权
4.1授权
sql格式: GRANT 权限/角色列表 TO 用户名 [WITH ADMIN OPTION]; 例如1: GRANT dba TO nowashing; 授权dba角色给nowashing这个用户。 后续篇章将权限,角色统称为权限。 例如2: 权限或角色有多项用逗号分隔: GRANT connect,resource,dba TO nowashing; 例如3: 被授权用户拥有此权限后是否可以再将此权限授予别人: GRANT dba TO nowashing WITH ADMIN OPTION; 不加WITH ADMIN OPTION是不允许授予别人的。 例如4: 将某授权授予给所有用户: GRANT 权限 TO PUBLIC; |
4.2撤销授权
sql格式: REVOKE 权限/角色列表 FROM 用户 例如:REVOKE dba TO nowashing; 收回(撤消)dba角色从nowashing这个用户。 权限或角色有多项用逗号分隔: REVOKE connect,resource,dba TO nowashing |
4.3查询已拥有的权限
SELECT * FROM dba_sys_privs; --查询所有用户和角色被授予的系统权限 SELECT * FROM user_sys_privs; --查询当前登录用户被授予的系统权限 SELECT * FROM user_role_privs—查询当前登录用户拥有的角色 |
4.4常见系统权限
系统权限: 允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等。
对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等。
Oracle的系统权限有206种(SELECT * FROM system_privilege_map),以下仅列出常用的一些:
权限名称 | 描述 |
create session | 连接到数据库 |
create sequence | 创建序列 |
create synonym | 创建同义词 |
create public synonym | 创建公用的同义词 |
create table | 创建表 |
create any table | 在任何模式中创建表 |
drop table | 删除表 |
drop any table | 删除任何模式中的表 |
create procedure | 创建存储过程 |
execute any procedure | 运行任务模式中的存储过程 |
create user | 创建用户 |
alter user | 修改用户 |
drop user | 删除用户 |
create view | 创建视图 |
模式(schema):是某个用户拥有所有对象的集合。
4.5常见的系统角色
角色名称 | 拥有权限 |
dba | 所有权限 |
connect | create session 连接到数据库 alter session --修改会话 create cluster --建立聚簇 |
resource | create trigger--建立触发器 create sequence --建立序列 create procedure --建立存储过程 create cluster --建立聚簇 create operator --建立操作员 create index --建立索引 create indextype --建立索引类型 create table --建立表 |
4.6对象权限
所谓的对象指的是:表,视图,索引,同义词,存储过程,触发器,序列……
- 不同的对象具有不同的对象权限
- 对象的拥有者拥有所有权限
- 对象的拥有者可以向外分配权限
对象权限 | 表 | 视图 | 序列 | 过程 |
查询(select) | √ | √ | √ | |
插入(insert) | √ | √ | ||
更新(update) | √ | √ | ||
删除(delete) | √ | √ | ||
修改(alter) | √ | √ | ||
索引(index) | √ | |||
关联(references) | √ | |||
执行(execute) | √ |
4.6.1授予权限
sql格式: GRANT 权限列表 ON 对象名 TO 用户名 [WITH GRANT OPTION] 例1,授予郁金香这个用户,向学生表查询,插值,修改,删除的权限: GRANT select ,insert,update,delete,execute ON t_student TO yujinxiang; 例2,向数据库中所有用户分配权限: GRANT select ON dept TO PUBLIC; |
4.6.2授予部分字段权限
sql格式: GRANT 权限名称 (字段列表) ON 对象名 TO 用户名 [WITH GRANT OPTION] 例如,授予郁金香这个用户,修改学生表的学生姓名,学生年龄的权限: GRANT update (stu_name,student_age) ON t_student TO yujinxiang; |
4.6.3查询已拥有权限
sql格式: SELECT * FROM user_tab_privs_made --查询授出去的对象权限(通常是属主自己查) SELECT * FROM user_tab_privs_recd,SELECT * FROM user_tab_privs --查询当前用户拥有的对象权限 |
4.6.4撤销权限
sql格式: REVOKE 权限列表 ON 对象名 FROM 用户名; 例1,撤消授予郁金香这个用户,向学生表查询,插值,修改,删除的权限: REVOKE select ,insert,update,delete,execute ON t_student FROM yujinxiang; 例2,撤消授予郁金香这个用户,修改学生表的学生姓名,学生年龄的权限: REVOKE update ON t_student FROM yujinxiang; |