博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle中的public
阅读量:2446 次
发布时间:2019-05-10

本文共 3493 字,大约阅读时间需要 11 分钟。

Oracle中的PUBLIC是一种特殊的存在,总是感觉概念比较模糊,我们就简单通过几个测试来理解吧。
首先我们创建一个public的synonym,我们看看这个public的含义。
SQL> create public synonym test for n1.test;
Synonym created.
查看数据字典,可以看到owner是PUBLIC
SQL> select object_name,owner,object_type from dba_objects where object_name='TEST' ;
OBJECT_NAME          OWNER                OBJECT_TYPE
-------------------- -------------------- --------------------------------------
TEST                 PUBLIC               SYNONYM
TEST                 N1                   TABLE        
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的对象,那么在对象数据字典里就会有相应的记录。
SQL>  select * from dba_synonyms where synonym_name='TEST';
OWNER                SYNONYM_NAME         TABLE_OWNER          TABLE_NAME           DB_LINK
-------------------- -------------------- -------------------- -------------------- --------------------
PUBLIC               TEST                 N1                   TEST
如果我们赋予了某个对象的权限给PUBLIC,在权限数据字典中会有相应的记录。
SQL> select * from dba_tab_privs where grantee='PUBLIC' and rownum<10;
GRANTEE              OWNER                TABLE_NAME                     GRANTOR    PRIVILEGE            GRANTA HIERAR
-------------------- -------------------- ------------------------------ ---------- -------------------- ------ ------
PUBLIC               SYS                  ORA$BASE                       SYS        USE                  NO     NO
PUBLIC               SYS                  DUAL                           SYS        SELECT               YES    NO
PUBLIC               SYS                  SYSTEM_PRIVILEGE_MAP           SYS        SELECT               YES    NO
PUBLIC               SYS                  TABLE_PRIVILEGE_MAP            SYS        SELECT               YES    NO
PUBLIC               SYS                  STMT_AUDIT_OPTION_MAP          SYS        SELECT               NO     NO
PUBLIC               SYS                  DM$EXPIMP_ID_SEQ               SYS        SELECT               NO     NO
PUBLIC               SYS                  STANDARD                       SYS        EXECUTE              NO     NO
PUBLIC               SYS                  DBMS_STANDARD                  SYS        EXECUTE              NO     NO
PUBLIC               SYS                  ALL_XML_SCHEMAS                SYS        SELECT               YES    NO
9 rows selected.
如果感觉有些奇怪,我们可能记得在使用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里面。
[oracle@newtest lib]$ less config.c
/*  SS_DBA_GRP defines the UNIX group ID for sqldba adminstrative access.  */
/*  Refer to the Installation and User's Guide for further information.  */
/* IMPORTANT: this file needs to be in sync with
              rdbms/src/server/osds/config.c, specifically regarding the
              number of elements in the ss_dba_grp array.
 */
#define SS_DBA_GRP "dba"
#define SS_OPER_GRP ""
#define SS_ASM_GRP ""
char *ss_dba_grp[] = {SS_DBA_GRP, SS_OPER_GRP, SS_ASM_GRP};   
[oracle@newtest lib]$ id oracle
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)
而顺带衍生一下,使用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确实是一个特殊的存在,可以简单理解为所有数据库用户的集合。
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-2124616/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-2124616/

你可能感兴趣的文章
如何在Microsoft表单中添加分支
查看>>
在“提示”框中:删除Windows 8安全启动,从Media Center启动应用程序,并加快Windows安装速度...
查看>>
修改时序约束改变slack_如何更改Slack的默认表情符号肤色
查看>>
如何在iPhone,iPad和Mac上禁用Safari经常访问的起始页
查看>>
vscode变假期不提示_12个假期的家庭技术支持提示
查看>>
将电视频道徽标添加到Windows 7 Media Center
查看>>
改善Google Chrome中的YouTube视频观看
查看>>
配置您的计算机以备份到Windows Home Server
查看>>
解决Windows Home Server Toolkit的连接问题
查看>>
如何在Windows 10中打印照片
查看>>
如何在离开时自动检测巢穴
查看>>
ubuntu显示管理器_如何在Ubuntu的文件管理器中显示导航栏而不显示面包屑
查看>>
关于极客
查看>>
自定义日历_如何在网络上自定义Google日历的通知
查看>>
hue功能_Philips Hue的“新实验室”部分中的最佳实验功能
查看>>
微软office在线文档_如何使用Microsoft Office密码保护文档和PDF
查看>>
如何在SHIELD Android TV上调整过扫描
查看>>
outlook 禁用不安全_如何在Outlook中禁用删除确认对话框
查看>>
找到丢失的磁贴跟踪器后如何获取通知
查看>>
PlayStation 4 Pro上的“升压模式”是什么?
查看>>