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确实是一个特殊的存在,可以简单理解为所有数据库用户的集合。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2016-09-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP实战技术

这些Mysql基础设计思路以及优化思路我都给你总结好了

4、btree索引,就是用树形结构存储在磁盘上,其中操作是用2分发,找一个中间点,然后把大比这个大的分在一边,小的放在一边,然后当你查询的时候,从数字头开始,大...

992
来自专栏农夫安全

注入学习之sqli-labs-4(第三关)

前言 说明一下问什么没有less2、less3、less4的讲解? 前两篇如果你弄懂了,第2、3、4关卡原理都是一样的,无非是sql语句的稍微不同 比如: 第一...

3436
来自专栏专注 Java 基础分享

初识Hibernate之关联映射(二)

     上篇我们介绍了关联映射的几种形式,有单向多对一,单向一对多,还有双向一对多。本篇接着介绍有关关联映射的其他几种映射方式,主要有以下几种: 基于外键的单...

2295
来自专栏用户画像

mysql模拟题二

  3) MSSQLServer2005Enterprise Edition是哪一种版本?

996
来自专栏技术碎碎念

sql server存储过程编程

存储过程是一组完成特定功能的SQL 语句集合,经编译后存储在数据库中。 存储过程作为一个单元进行处理并以一个名称来标识。它能向用户返回数据、向数据库表中写入或修...

3906
来自专栏积累沉淀

Mybatis多对多关联查询

mybatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联...

2159
来自专栏NetCore

Sql语句收藏

1、 查询列表,按照In的排序进行排序 select *, (select count(0) from [picture] where album_id=[al...

20610
来自专栏数据库

使用VBA创建Access数据表

导读: 本期介绍如何在Access数据库中创建一张空数据表。下期将介绍如何将工作表中的数据存入数据库对应的表中,随后还将介绍如何从数据库的表中取出数据输出到Ex...

2397
来自专栏Kevin-ZhangCG

Oracle学习笔记四

在写java程序中有集合的概念,那么在pl/sq中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据。

802
来自专栏我爱编程

Day24访问数据库

使用SQLite SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在i...

3784

扫码关注云+社区