jeanron100
作者jeanron100·2017-03-28 10:35
数据库管理员·搜狐畅游

怎么样理解Oracle中的public?

字数 1834阅读 2612评论 0赞 0

Oracle中的PUBLIC是一种特殊的存在,总是感觉概念比较模糊,我们就简单通过几个测试来理解吧。
首先我们创建一个public的synonym,我们看看这个public的含义。
SQL> create public synonym test for n1.test;
Synonym created.
查看数据字典,可以看到owner是PUBLIC
QQ截图20170327164609.png

QQ截图20170327164609.png

public是一个用户吗?
SQL> select *from dba_users where username='PUBLIC';
no rows selected
那public是一个角色吗?
SQL> select *from dba_roles where role='PUBLIC';
no rows selected
大体而言,public两种表现形式
一种是创建public的对象,都是在PUBLIC的这个owner下
create public synonym xxxx for xxx;

或者我们把某个对象的权限赋予PUBLIC
grant select on xxx to public;

如果我们创建了某个public的对象,那么在对象数据字典里就会有相应的记录。
QQ截图20170327164646.png

QQ截图20170327164646.png

如果我们赋予了某个对象的权限给PUBLIC,在权限数据字典中会有相应的记录。
SQL> select * from dba_tab_privs where grantee='PUBLIC' and rownum<10;
QQ截图20170327164733.png
QQ截图20170327164733.png

QQ截图20170327164828.png
QQ截图20170327164828.png

如果感觉有些奇怪,我们可能记得在使用sysoper的时候,shou user显示的是PUBLIC
[oracle@newtest ~]$ sqlplus sys/oracle as sysoper
SQL> show user
USER is "PUBLIC"
而如果我们尝试把它当做用户,修改密码,那是行不通的。
SQL> alter user public identified by oracle;
alter user public identified by oracle

       *

ERROR at line 1:
ORA-01935: missing user or role name
当然此处需要多补充一些,就是查看数据库软件安装的时候选择的用户组信息,是通过下面的这个文件可以看到的,在$ORACLE_HOME/rdbms/lib/config.c里面。
QQ截图20170327164934.png

QQ截图20170327164934.png

而顺带衍生一下,使用sysoper和sysdba出了官网的描述外,还有一些差别。
首先在上面的用户配置信息的条件下,使用操作系统认证的方式,sysoper来登录是会报错的。
[oracle@newtest ~]$ sqlplus / as sysoper
SQL*Plus: Release 11.2.0.4.0 Production on Tue Sep 6 19:42:58 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
使用TNS连接的方式就大大不同。
[oracle@newtest ~]$ sqlplus sys/oracle@newtest2 as sysoper
SQL>
而与此相比,有些不大靠谱的是使用sysdba的时候,随便给个用户密码,都可以直接连接到数据库实例,这个时候还没有应用到密码文件校验。
[oracle@newtest ~]$ sqlplus sys/oraclsadfasdfa as sysdba
SQL>
这一点还是需要注意到的,当然使用TNS的方式都会开始校验。
[oracle@newtest ~]$ sqlplus sys/oraclsdfasdfe@newtest2 as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied
通过上面的小测试,可以看出PUBLIC确实是一个特殊的存在,可以简单理解为所有数据库用户的集合。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广