思考:如何创建数据库其他用户?什么是表空间?如何创建与删除,怎么对用户进行创建、修改与删除?
1.什么是表空间?
概念:
可以看做是数据库的逻辑存储空间 ---> 数据库中开辟的空间用来存储数据库对象
表空间与数据文件的关系:
表空间由一个或多个数据文件组成,数据文件的大小和位置可以自己定义
表空间的分类:
1.永久表空间:数据库中要永久化存储的一些对象,如:表、视图、存储过程
2.临时表空间:数据库操作时中间执行的过程,执行结束后,存放的内容会被自动释放
3.撤销表空间:用来帮助会退未提交的事务数据
2.表空间的常见操作
1.查看用户的表空间:
数据字典
dba_tablespaces(系统管理员级别查看的数据字典)
user_tablespaces(普通用户查看的数据字典)
查看表空间的字段
desc dba_tablespaces --- 注意不要在PL/SQL中操作
查看用户的字段信息
desc dba_users
2.查询系统表空间
SELECT * FROM User_Tablespaces;
SELECT * FROM dba_Tablespaces; --- 注意 需要使用system用户登录才能查看
3.管理员角色查看表空间
SELECT
file_name,tablespace_name,bytes,autoextensible
FROM Dba_Data_Files
WHERE Tablespace_name='USERS'; --- 注意 tablespace_name 需要大写
注释:查询数据文件中 表空间名称为users的文件存储地址,名称,大小,自增长空间
4.表空间的创建
scott用户是没有权限直接创建表空间的,所以需要使用system用户进行授权
grant create tablespace to scott; --- 赋予scott创建表空间的权限
grant alter tablespace to scott; --- 赋予scott修改表空间的权限
grant drop tablespace to scott; --- 赋予scott删除表空间的权限
grant unlimited tablespace to scott; --- 赋予scott用户可以在其他表空间随意建表
注意:
1.系统权限umlimited tablespace是隐含在dba,resource角色中的一个系统权限,当用户
得到dba或resource的角色时,unlimited系统权限也隐式授权给用户。
2.系统权限unlimited不能被授予role,可以被授予用户
3.系统权限unlimited不会随着resource,dba被授予role而授予用户
创建格式:
create tablespace 表空间名称 datafile '数据文件的绝对路径' size 表空间的大小
删除格式:
drop tablespace 表空间名称
注意:在进行相应操作时,应该具有相应的操作权限
5.实例:
1.创建名为 zhang的表空间,并设置自动增长表空间的文件大小,每次增加10M。一直到2G
CREATE TABLESPACE zhang DATAFILE
'绝对路径'
SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 2G;
注意:autoextend 是自动增加表空间的 类似自增长
2.查看创建的表空间
SELECT * FROM dba_data_files t WHERE t.tablespace_name = 'ZHANG';
注意:该操作在system用户下完成
3.给表空间增加大小
alter database datafile ‘绝对路径' resize 50M
或者
alter tablespace zhang add datafile '绝对路径2' size 10M
3.用户的相关操作
1.概念:
数据库中内置了很多用户,有时我们需要创建一个自己的用户。在Oracle中一个数据库对应多个用户,而
MySQL中是一个用户对应着对个数据库。
2.用户的创建语法:
create user 用户名 identified by 口令
还有一些可省略的参数,暂时不写
3.在用户创建之前需要先进行授权
GRANT CREATE USER TO scott;
GRANT ALTER USER TO scott;
GRANT DROP USER TO scott;
4.实例:
1.创建用户test,并设置密码也是test
create user test identified by test;
2.修改用户的口令为 test2
alter user tets identified by test2;
5.用户的管理
新创建的用户是没有任何权限的,包括创建会话的权限都没有,所以在创建的同时我们可以进行解锁
create user 用户名 identified by 密码 account nulock;
提示:
alter user 用户名 account nulock;
1.为新创建的权限进行授权
grant connect to 用户名
2.让用户具有查询scott用户下的dept表的权限
grant select on scott.dept to test;
3.删除用户
drop user 用户名;
注意:在删除用户的时候,如果被删除的用户下存在对象,比如视图、表等,则系统会提示不能删除此用户,
如果要强制删除,需要加上CASCADE,代表先删除该用户下的所有对象,一般情况下,为了安全考虑
都不会使用该参数。例如:
drop user test cascade;
4.给用户分配权限
引导:上面提到过,新创建的用户是不拥有任何权限的,所有为了方便实际使用,我们会给用户进行相应的权限分配
1.权限的分类
概念:权限就是用来控制特定的用户发送特定的SQL语句是否允许正确的执行
why: 在多用户的环境,DBA需要维护数据库访问的安全,以确保特定用户拥有特定的操作权限
数据库的权限:
系统权限
对象权限
系统权限 --- 针对用户而言的:
系统规定用户使用数据库的权限,例如:
create session : 允许新创建的用户开启会话,类似create connect
create table : 允许用户创建表
create sequence:创建序列用的
create view:创建视图
create procedure:创建存储过程
对象权限 --- 针对表或视图而言的:
某种权限用户对其它用户的表或视图的存取权限,例如:
alter:修改字段
select:查询
insert:插入
update:修改数据
delete:删除数据
1.1 系统实例:
1.修改所有的表的权限
alter any table --- 修改表结构
2.查询任何表的权限
select any table --- 查询任意表
注意: 不针对对象的权限,就是系统权限。所以这两个权限也是系统权限。
系统权限:
分配语法:grant 权限 to 用户名;
例如:
给test用户分配权限:
查询当前用户所拥有的系统权限
select * from user_sys_privs;
SQL语句 | 含义 |
---|---|
grant create session to test | 授权用户可以连接到数据库 |
grant create table to test | 授权用户可以创建表 |
grant insert any table to test | 授权用户可以插入表的权限 |
grant update any table to test | 修改表数据的权限 |
grant unlimited tablespace to test | 授权可以使用表空间 |
grant create user to test | 授权用户可以创建用户 |
grant drop user to test | 授权可以删除用户 |
对象权限
语法:grant 权限 on schema.对象名 to 用户名
查询当前用户拥有的对象权限:
select * from user_tab_privs;
常用方法:
SQL语句 | 含义 |
---|---|
grant select On 对象名 to 用户名 | 将查询权限赋予某人 |
grant insert on 对象名 to 用户名 | 将添加数据权限赋予给某人 |
grant all on 对象名 to 用户名 | 将对象上所有的权限都赋予给用户 |
grant insert on 对象名 to public | 将插入权限赋予给所有的用户 |
grant select,update,insert on 对象名 to 用户名 | 将查询 更新 插入权限赋予用户 |
grant all on scott.dept to user2; | 将对象的所有权限赋予user2 |
grant all on scott.dept to public; | 将对scott用户下的dept表的所有权限赋予所有用户 |
注意1:
1.public表示是所有的用户,这里的all权限不包括drop
2.当权限控制在表列级别上:
grant update(列名) on 表名 to 用户名 — 只能修改表中的固定列
grant insert(列名) On 表名 to 用户名 ---- 只能插入表中固定的列
注意2:
查询select,删除delete不能控制到列级别
2.权限的管理与传递
概念:可以将自己拥有的权限继续分配给别人
系统权限传递:
grant 权限 to 用户名 with admin option --- 关键字:with admin option
对象权限传递:
grant 权限 to 用户名 with grant option --- 关键字: with grant option
权限的管理:
级联授权(对象权限,with grant option):
grant 权限 to 用户名 with grant option;
例如:
grant all on scoot.dept to 用户名 with grant option;
级联授权(系统权限,with admin option)
grant 系统权限 to 用户名 with admin option;
例如:
grant create user to 用户名 with admin option;
解除用户权限 --- revoke:
语法:revoke 权限 from 用户名;
例如:
revoke select on scott.emp from 用户名; 撤销该用的对象权限
revoke create user from 用户名; 撤销该用户创建用户的系统权限
admin 与 grant 的区别:
admin:
当给一个用户授予系统权限时带上with admin option,在revoke授予这个用户系统权限时不会级联回收授 予给其他用户的权限,类似于浅拷贝与深拷贝中的深拷贝。
grant:
当给一个用户授予对象权限的参数带上with grant option,在revoke授予这个用户的系统权限时,会级联 收回对象权限。
5.关于角色
概念:角色类似于演员的身份,比如剧本中的皇上(权利) <--- 如果你拥有这个角色,那么相对的你也就拥有了相应的权 限。
语法:
create role 角色名称; --- 创建一个角色
给创建的角色授权:
grant select on scott.emp to 角色名称;
为用户授予某个角色:
grant 角色名称 to 用户名称;
删除角色:
drop role 角色名称;
注意:
1.不能将unlimited tablespace权限授予角色
系统中默认建好的几个常用角色:
1.DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构
2.resource:拥有resource权限的用户只可以创建实体,不可以创建数据库结构
3.connect:拥有connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构
6.关于同义词
概念:为了方便的使用他人的表,类似于mysql中的 as 起别名。是指为表、视图、序列、存储函数
、包、快照或其他同义词等起的另外一个名字。使用同义词为了安全和方便。
好处:
1.引用对象不需要指出对象的持有者
2.引用对象不需要指出它所在的数据库
3.为对象提供另外一个名字
创建同义词:
语法: create [public] synonym 同义词名 for 对象名
例如:为scott.emp创建名为emp2的同义词
create public synonym emp2 for scott.emp;
注意:
1.public代表该同义词的类型为公用,否则为私有
2.在同一用户下不能出现相同名称的两个对象
3.虽然是公共的同义词,其他的用户访问的时候也需要有相应的权限
4.如果表名和同义词相同的情况下,访问的是当前用户下的表名,如
果当前用户下emp表不存在,则访问公共的同义词。
7.本文总结
表空间 ---> 创建 修改 删除 --->权限
用户 ---> 创建 修改 删除用户 --->权限
权限 ---> 系统权限 对象权限 只有insert和update能针对列字段
级联授权 with admin option with grant option
同义词 --->给对象去别名
public 公共的
此时已莺飞草长 我们正在路上。