概述
访问控制
• Oracle是一个多用户访问的数据库服务器,提供了对数据库级别的访问控制,对数据库对象级别的访问控制,并能授予和撤销对对象的各种访问权限
• 访问数据库并使用数据库对象需要权限,用户需要系统权限来访问数据库,需要对象权限来操作数据库对象的内容
• 数据库管理员是一个特殊的用户,该用户本身可以访问数据库并操作数据库对象,同时还具有授予用户访问数据库及对象的权限
• 但并不是所有的授权都是由数据库管理员完成的,他们可以将这种授权的权利分配给其他用户,使其他用户在可授权的范围内进行授权
创建用户
要想给用户分配系统权限和对象权限,首先要创建用户
创建用户也需要权限,如果使用scott用户访问Oracle数据库,执行创建用户的SQL语句,Oracle会提示“权限不足”
可以使用具有数据库管理员身份的用户SYS来访问数据库,创建用户
语法形式
CREATE USER user IDENTIFIED BY password
其中user和password就是该用户的用户名和密码
需求:创建一个用户名为jacky的用户,密码为123456
CREATE USER jacky IDENTIFIED BY 123456
分配系统权限
常用系统权限
作为开发、测试和实施人员,常被授予的系统权限包括
允许用户登录:CREATE SESSION
允许创建表:CREATE TABLE
允许创建视图:CREATE VIEW
允许创建序列:CREATE SEQUENCE
允许创建过程:CREATE PROCEDURE
语法
给一个用户授权的简要语法形式如下
GRANT privilege1[,privilege2…]
TO user | role | PUBLIC
[WITH ADMIN OPTION]
其中privilege1、privilege2…表示要授予的权限,
user表示用户的名字
role表示角色(后面会介绍)名字
PUBLIC表示每一个用户都被授权
WITH ADMIN OPTION 表示允许被授予权限的人再授予系统权限给其他用户和角色
撤销系统权限
REVOKE create sequence FROM jacky
角色权限
数据库的系统权限、对象权限很多,如果针对每个用户逐个分配每个权限,是一个复杂且容易出错的工作
一类用户需要分配的权限往往也是一致的,这时候我们可以将相关的一系列的权限,组成一个命名的组,这个命名组就是角色
一个角色拥有的权限称为角色权限,将一个角色权限授予用户(又称为给用户指定角色),则这个角色权限所拥有的权限就全部授予了这个用户
一个用户可以被指定为多个角色,这个用户就同时拥有这多个角色所拥有的全部权限
角色必须由数据库管理员创建。
创建角色
创建角色的语法为:
CARETE ROLE role
其中role为角色名,数据库管理员可以使用GRANT语句将权限授予角色,也可以给用户指定角色
将权限授予角色
GRANT create session,create table, create view, create sequence TO developer;
developer为角色
给用户指定角色
GRANT developer TO jacky;
内置角色
CONNECT :允许连接数据库
RESOURCE:允许创建表,创建序列
DBA:具有与管理员相同的权限
对象权限
对象权限是在指定的表、视图、序列和过程上执行特定操作的权限
这里的特定权限包括INSERT、DELETE、UPDATE和SELETE以及INDEX、ALTER、REFERENCES(引用权限)和EXECUTE(执行权限)
但并不是每个对象都可以被授予这些权限的,下表列出了各个对象可以被授予哪些权限
此处主要关注的是表的对象权限
授予对象权限
对象的拥有者有关于该对象的所有权限,一个用户可以授予该用户所拥有对象上任何对象权限给另一个用户或角色。而且,如果包括了WITH GRANT OPTION选项,则得到权限的用户可以再将权限授予其他的用户
给一个用户授权对象权限的语法形式如下:
GRANT object_priv[(columnlist)]
ON object
TO user | role | PUBLIC
[WITH GRANT OPTION]
其中object_pirv表示将被授予的对象权限,可以包括多个对象权限,用逗号隔开。也可以不输入具体的对象权限,直接输入ALL,表示授予该对象所能拥有的所有权限
columnlist表示被指定授权的字段
object表示被授权的对象表名或视图等
user表示用户的名字
role表示角色名字
PUBLIC表示每一个用户都被授权
WITH GRANT OPTION表示允许被授予权限的人再授予对象权限给其他用户和角色
实例
需求:给jacky用户授予针对雇员表emp的查询和插入权限,因为雇员表的所有者是scott用户,所以用scott用户身份访问Oracle数据库,完成对jacky用户的授权工作,具体的授权SQL语句如下
GRANT select, insert
ON emp
TO jacky
注意:
使用jacky用户登录数据库,执行下面的SQL语句
SELECT * FROM employees
提示“表或视图不存在”,什么原因呢?
一个数据库对象的全称应该是“方案名.对象名”
SELECT * FROM scott.emp
可以正常访问
撤销对象权限
使用REVOKE语句可撤销已经授予用户的权限
具体撤销授权的语法如下
REVOKE insert
ON emp
FROM jacky```
例如要撤销给jacky用户针对雇员表emp的插入权限,其SQL语句如下
REVOKE insert
ON emp
FROM jacky
执行该SQL语句,针对雇员表的插入权限被撤销。
注意
– 一个用户创建的表无法被另一个用户所访问,管理员除外,
– hawl用户访问 select * from scott.emp_temp --访问scott方案的表
– 用户对自己创建的表拥有所有的权限
–其他用户想要访问时,需要授权
grant select update on emp to hawl with grant option
最后
以上就是勤劳雨为你收集整理的Oracle笔记--访问控制访问控制的全部内容,希望文章能够帮你解决Oracle笔记--访问控制访问控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复