Oracle中的PUBLIC(r10笔记第14天)
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
-------------------- -------------------- -------------------- -------------------- -------------
PUBLIC TEST N1 TEST
如果我们赋予了某个对象的权限给PUBLIC,在权限数据字典中会有相应的记录。
SQL> select * from dba_tab_privs where grantee='PUBLIC' and rownum<10;
如果感觉有些奇怪,我们可能记得在使用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确实是一个特殊的存在,可以简单理解为所有数据库用户的集合。
- Python生成词云图,TIIDF方法文本挖掘: 词频统计,词云图
- C/C++——vector的基本操作总结
- 数据库负载急剧提高的应急处理(二) (r9笔记第55天)
- 社团划分——有向图的Label Propagation算法
- Python基础——网络编程
- 分区表的一个持续改进方案(r9笔记第53天)
- python jieba分词(结巴分词)、提取词,加载词,修改词频,定义词库
- MySQL中的NULL和空串比较 (r9笔记第52天)
- Core-periphery decomposition--核心-外围模型R代码整理
- 停止数据库没有响应的问题分析(r9笔记第51天)
- Hive——巧用transform处理复杂的字符串问题
- 停止数据库没有响应的问题分析(r9笔记第50天)
- 一个SQL语句引发的ORA-00600错误排查(一) (r9笔记第64天)
- 一个SQL语句引发的ORA-00600错误排查(二)(r9笔记第65天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 面试高频:反转链表
- 存储过程
- 为什么别人不想回答你提的问题?
- python面试题搜集:史上最全python面试题详解(一)
- 一日一技:在 Golang 中如何快速判断字符串是否在一个数组中
- 面试问题之操作系统
- 软技能提升:转转中后台规范落地实践
- python面试题搜集(三)
- 什么是计算机网络?为什么需要网络通信?如何进行网络编程?
- Python中好用又高效的Collections 模块
- 正确创建Python二维数组
- 深入理解Python内存管理与垃圾回收,再也不怕问了(一)
- 走进面向“对象”编程的理想国(一)——深入理解Python中的一切皆对象
- 深入理解Python内存管理与垃圾回收,再也不怕问了(二)
- 如何利用Python实现二分查找(迭代和递归)