传智播客oracle视频下載,传智播客发布的Oracle数据库视频课堂记录

权限管理:

oracle 9里面默认的三个用户名和密码:

sys change_on_install //权限最高的管理员

system manager //普通的管理员

scott tiger //普通用户

在oracle 10中,仍然使用这三个用户作为默认用户。但sys和system用户的密码不再默认。在安装数据库的时候,可以由用户指定 。从安全角度考虑,scott用户默认被锁定,所以要使用该用户,需要先解除锁定。

注意:我们要使用oracle数据库,至少要启动两个服务,一个是监听服务,一个是数据库实例。

创建用户;

以系统管理员的身份登陆。

使用语句:create user lisi identified by lisi; //创建了一个叫lisi的用户,密码也为lisi

虽然创建了用户,但该用户现在并无任何权限。就连登陆数据库的权限都没有。假如使用:sqlplus lisi/lisi 登陆数据库,会报错,显示没有create session的权限。

所以还是先使用系统管理员给lisi这个用户指定登陆的权限。

语句为:grant create session to lisi;

授权过后,lisi可以登陆数据库了。但是现在还没有创建数据库表的权限,仍需指定。

语句为:grant create table to lisi;

使用lisi账号,创建数据库表:create table mytable(id int);

执行后却提示错误:对表空间‘USERS’无权限。每个数据库表都有自己的表空间,相当于文件必须位于某个文件夹下。

虽然lisi用户具有创建表的权限,但没有使用表空间的权限,最终还是创建不了表。这就好比你有我房间的钥匙,但是没有我家大门的钥匙,你最终还是进不了我的房间。

通过系统管理员授予lisi用户使用表空间的权限:

grant unlimited tablespace to lisi;这样用户lisi对表空间的使用就没有限制了。

在lisi账户下,创建表:create table mytable(id int);

插入一条记录:insert into mytable values(1);

插入成功。

也可以删除表:drop table mytable;

有人可能会产生疑问,既然数据库的权限管理这么严格,上面我们只是授予lisi用户创建表的权限。并没有授予其插入,删除等权限呀。这里我们可以这样理解:当前用户创建了一个表,那么该表就属于该用户,用户既然创建了表,自然就对该表拥有一切权限啦。

而且:数据库并没有drop table的权限。使用:grant drop table to lisi;出现:权限缺失或无效的错误提示。

上面是授予权限,那么如何撤销用户的某个权限呢?

使用如下语句可以撤销lisi的创建表的权限:revoke create table from lisi;

再使用lisi账号创建表,就会出现错误提示:权限不足。

在大多情况下,如果我们对用户的权限经常修改,我们如何知道用户有哪些权限呢?

数据库默认维护了一个视图对外提供一些系统信息(叫数据字典),可以查看用户的具体权限。

使用如下语句查看当前用户的系统权限:

select * from user_sys_privs;

USRENAME PRIVILEGE ADM

----------------------------------------------- ---------------------------------------- ----

LISI CREATE SESSION NO

LISI UNLIMITED TABLESPACE NO

oracle中的权限分为系统权限和对象权限。

系统权限就是我们上面所讲的一些权限。

对象权限是指:比如用户lisi创建了一个表,该表就可以作为一个对象看待。另外一个用户是否有访问该表的权限呢。这就是所谓的对象权限管理。

我们在创建一个用户wangwu。密码也为wangwu。在该用户下,创建一个表mytab。如果lisi用户向访问表mytab,是否会成功呢?

在lisi的窗口下,输入:select * from mytab;报错:表或视图不存在。我们知道表属于表的创建者。

这里我们直接查询表mytab,数据库会到当前用户下寻找该表,显然当前用户lisi没有表mytab。所以提示表或视图不存在。

那我们指定表的所有者,再次查询:select * from wangwu.mytab;窗口显示“权限不足”的错误提示。由此可知,虽然找到了mytab表,却没有访问的权限。

只有表的拥有者才可以授予该表的相关权限给其他用户。使用用户wangwu的操作窗口,使用如下语句,把查询语句授予lisi;

grant select on mytab to lisi;

执行此语句后,lisi就可以查询用户wangwu的mytab表了。

如果要获得其他对于mytab表的权限,仍然需要指定(多个权限同时指定,用逗号分隔):

grant update,select,delete on mytab to lisi;

如果要把表的所有权限都赋予给用户lisi,可以这样写;

grantallon mytab to lisi;

在wangwu的窗口下,向mytab插入几条数据。然后查询,却显示“未选定行”。说明刚才的插入没有同步到数据库中去。

在oracle下,默认需要对sql语句手动进行提交。所以在几条插入语句后,可以执行commit;语句提交。再次查询,表中就有数据了。

如果要把某个权限授予所有的用户,可以使用public关键字:

grant create session topublic;

查看当前用户的对象权限,使用如下语句:

select * from user_tab_privs;

oracle的权限控制粒度很细,甚至可以精确到某一列的权限。

grant update(name) on mytab to lisi;

这句执行的效果就是,lisi用户对表mytab仅拥有更新name这一列的权限。

grant insert(id) on mytab to lisi;

查看当前用户对数据库表的列的权限:

select * from user_col_privs;

在lisi权限下,执行:update wangwu.mytab set name=fdsfa,id="dfs" where id=1;

执行后显示权限不足。

update wangwu.mytab set name="fsa" where id=1;

这样就可以了。

同样执行:insert into wangwu.mytab values(4,"asf");执行后也显示权限不足。

修改语句为:inset into wangwu.mytab(id) values(4);成功执行。

只能对更新和插入设定精确到某列的权限控制,不能对查询和删除设定。

命令:show user可以查看当前用户

数据库有三种类型的语句:

ddl:数据定义语言,指定是数据库表的创建,删除之类的操作。

dml:数据操纵语言,针对表的增删改查操作,只有dml需要进行提交操作。

dcl:数据控制语言,对系统权限和对象权限的管理。

权限的传递:

系统权限的传递:

sys用户把一些系统权限授权给lisi用户.

grant alter any table to lisi;

查看lisi的系统权限,就有了alter any table的权限。

现在lisi想把该权限传递授权给wangwu用户执行以下语句:grant alter any table to wangwu;执行后报“权限不足”。

要想lisi也可以传递权限,可以在sys用户授权时加上with admin option的选项,该选项就说明了还拥有权限的管理能力。

即:grant alter any table to lisiwith admin option;这样lisi就可以把alter any table的权限传递给wangwu了。

要想wangwu也可以传递该权限,也使用该admin选项即可。

查看lisi的系统权限,他的alter any table权限的同一行的adm字段取值由NO变为YES,说明lisi对该权限具有分配功能了。

对象权限的传递:

与系统权限的传递类似,不过后面的选项有所改变:

加入sys创建了一个A表。授予lisi的select权限:

grant select On A to lisi;

如果想让lisi拥有对A表的select权限的分配能力,只需修改为:

grant select On A to lisi with grant option;

思考:如果sys管理员撤销了lisi的权限,那么wangw的权限是否也被撤销了呢?

通过角色对权限进行管理

如果按照上面的权限管理方法 ,对每个用户逐一的分配权限,必然会很混乱,导致管理的困难。所以oracle提供了角色来对权限进行集合化的管理。

角色就是权限的集合。

在sys下创建角色:

create role myrole;

给角色添加权限:

grant create session to myrole;

grant create table to myrole;

创建用户:

create user zhangsan;

grant myrole to zhangsan;//赋予以上的两个权限给zhangsan

有些系统权限无法直接赋予角色,因为该权限太大了,比如unlimited tablespace。

例如:执行grant unlimited tablespace to myrole;

出现错误提示:无法将unlimited tablespace授予角色

删除角色:

drop role myrole;

权限举例:

create table create any table

[alter table] alter any table

[delete table] delete any table

补充:oracle数据库不含紫色的权限类型。因为有了create table权限,说明表的一切都归创建者。不需要还指定alter table和drop table权限了,默认就有了。

而create any table这个权限表明该用户可以给其他用户创建表。

示例:wangwu给lisi创建一个表temp

create table lisi.temp(id int);//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值