news 2026/10/1 8:44:15

Oracle数据库基础之5_权限管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle数据库基础之5_权限管理

Schema模式是一系列对象的集合。一个模式只能够被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。ORACLE 数据库中的每个用户都拥有一个唯一的模式,他所创建的所有模式对象都保存在自己的模式中。模式对象的类型有表、索引、簇、触发器、PL/SQL、序列、同义词、视图、存储过程和存储函数等。目前没有dba_schemas这样的视图,只有dba_users和dba_objects这样的视图。
SQL> conn hr/123456
–上面的hr表示用户

SQL> select count(*) from hr.employees;
–上面的hr表示schema

Profile
现实中使用profile的原因:不同的用户可能需要做不同的限制,这样就需要不同的profile,如果限制要求都一样,可以直接使用default的profile,default profile的值也是可以修改的,比如ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 5
场景1:一个default profile默认登录时输错密码10次就锁定用户,但是一个用户在PDA环境下手工输入密码时容易出错,要求该用户错误1000才锁定,但是不能影响其他用户错误10次就锁定,这就需要新建一个允许错误1000次的profile单独给这个用户使用
场景2:新上线一套程序,为防止程序bug,必须设置这个程序的用户只能创建50个连接,其他用户连接的不受限制,就需要建立一个只有50个连接的profile给这个新上线程序的用户使用

SELECT*FROMdba_profilescreateprofile test123limitPASSWORD_LOCK_TIME2FAILED_LOGIN_ATTEMPTS100SELECT*FROMdba_profilescreateusertest identifiedby123456profile test123createusertest1 identifiedby123456selectusername,profilefromdba_userswhereusernamein('TEST','TEST1')

一般DBA搭建好一套环境后,就改如下这个参数,设置为unlimited,即密码永不过期
alter PROFILE default LIMIT PASSWORD_LIFE_TIME unlimited

create user
建立一个用户后,如果不授权,那么这个用户什么都干不了,必须给这个用户授于一些对应的权限

SQL>createusertest identifiedby123456defaulttablespaceUSERS;SQL>conn test/123456ERROR: ORA-01045:userTEST lacksCREATESESSIONprivilege;logon deniedSQL>grantconnect,resource,createview,unlimitedtablespacetotest;

备注:实际工作中一般授予两个角色connect,resouce外加create view,unlimited tablespace两个系统权限就可以满足基本的使用要求

SQL>select*from(SELECT*FROMDBA_SYS_PRIVSWHEREGRANTEE='TEST'UNIONALLSELECT*FROMDBA_SYS_PRIVSWHEREGRANTEEIN(SELECTGRANTED_ROLEFROMDBA_ROLE_PRIVSWHEREGRANTEE='TEST'))orderby1;

grant权限不会覆盖原有权限,只会追加进去,不要担心

SQL>SELECT*FROMDBA_SYS_PRIVSWHEREGRANTEE='TEST';SQL>grantselectanytabletotest;SQL>SELECT*FROMDBA_SYS_PRIVSWHEREGRANTEE='TEST';

–没有create index、insert table、update table、delete table、drop table这种权限,是因为一个用户对其schema下已存在对象具有所有操作权限。
SQL> grant create table to test;
Grant succeeded.

以下操作都会报错ORA-00990
SQL> grant create index to test;
SQL> grant delete table to test;
SQL> grant insert table to test;
SQL> grant update table to test;
SQL> grant drop table to test;
ORA-00990: missing or invalid privilege

WITH ADMIN OPTION的作用,表示被授权的用户可以把该系统权限再授给其他用户

SQL>createusertest1 identifiedby123456;SQL>createusertest2 identifiedby123456;SQL>grantconnect,resourcetotest1;Grantsucceeded.SQL>conn test1/123456Connected.SQL>grantresourcetotest2;ERROR at line1: ORA-01031: insufficientprivilegesSQL>grantconnect,resourcetotest1WITHADMINOPTION;Grantsucceeded.SQL>conn test1/123456Connected.SQL>grantresourcetotest2;Grantsucceeded

一个用户A被授予了resource角色的系统权限后,这个A用户可以创建表,A可以看到自己创建的表,但是这个A用户看不到其他用户创建的表,除非给这个用户授予select any table的系统权限或给这个用户授予grant select on schema1.table1 to A的对象权限,然后这个A用户就查询schema1.table1表了

权限的传递继承
with admin option --针对系统权限,回收权限时不会级联回收,站在安全角度看,是很不安全的,故实际工作中几乎很少用到
with grant option --针对对象权限,回收权限时会自动级联回收,实际工作中还是挺常见

权限的授予要慎重,一旦授予,后面要回收会很难,回收了可能会引发对象失效,继而影响生产环境。
比如给一个用户授予了select any table权限,用户创建了一个存储过程,存储过程里面使用了select any table权限去访问很多其他表,一旦要回收用户这个select any table权限,那么存储过程中就无法访问其他表,这个存储过程就会失效会报错,基于这个存储过程的业务就受影响了

查询某个用户具有的所有系统权限

select*from(SELECT*FROMDBA_SYS_PRIVSWHEREGRANTEE='用户名'UNIONALLSELECT*FROMDBA_SYS_PRIVSWHEREGRANTEEIN(SELECTGRANTED_ROLEFROMDBA_ROLE_PRIVSWHEREGRANTEE='用户名'))orderby1;

查询某个用户具有的所有对象权限

SELECT*FROMDBA_TAB_PRIVSWHEREGRANTEE='用户名'UNIONALLSELECT*FROMDBA_TAB_PRIVSWHEREGRANTEEIN(SELECTGRANTED_ROLEFROMDBA_ROLE_PRIVSWHEREGRANTEE='用户名');

普通用户访问某个数据字典视图,需要赋予这个数据字典视图对应的底层表的对象权限

SQL>conn test/123456SQL>selectcount(*)fromv$session;ERROR ORA-00942:tableorviewdoesnotexistSQL>conn test/123456assysdbaSQL>grantselectonv$sessiontotest;ERROR ORA-02030: can onlyselectfromfixedtables/viewsSQL>grantselectonv_$sessiontotest;Grantsucceeded.SQL>conn test/123456SQL>selectcount(*)fromv$session;COUNT(*)----------35

查看resource角色拥有的系统权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE =‘RESOURCE’

对现有的角色比如resource增加系统权限create view
SQL> grant create view to resource;

假如10个用户都被授予了resource角色,这个10个用户都没有create view权限,此时单独给resource角色授予create view的权限后,这10个用户就可以拥有了create view权限,避免了一一对这个10个用户授予create view权限

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 8:42:36

AnythingLLM 搭本地知识库:文档问答不准怎么调

有同事问我,本地大模型能不能直接读公司的产品文档,别张嘴就瞎编。我前阵子用 AnythingLLM 搭过一套本地知识库,能用,但中间踩了三个坑,今天把过程和调参的地方写下来。先说这套东西在干嘛。让模型回答文档里的问题&am…

作者头像 李华
网站建设 2026/10/1 8:42:14

台州市热门的品牌策划设计服务商有哪些,靠谱企业形象设计公司筛选名录

台州企业形象设计怎么选:一份务实的筛选参考 台州及浙东沿海制造产业带近年来对外形象需求明显上升。企业参与招投标、展会、外贸洽谈、线上传播时,客户第一眼看到的往往不是产品参数,而是标志、色彩、画册、官网这些视觉载体。搜索企业形象设…

作者头像 李华
网站建设 2026/10/1 8:41:37

Sqlserver_Oracle_Mysql_Postgresql表_索引碎片或膨胀的知识点汇总

碎片的定义: 指单个数据块/页内部的空间利用率不足。 成因: INSERT: 向页中插入新行,但新行的大小不足以填满块/页的空闲空间。 UPDATE: 更新导致行增长(如 VARCHAR 列写入更多数据)&#xff0c…

作者头像 李华
网站建设 2026/10/1 8:41:08

openrig开源模块化装备架:从铝型材选型到3D打印组装的完整实践指南

2. 为什么我会亲手搭建一套 openrig如果你跟我一样,常年和路由器、树莓派、光猫、交换机和一堆开发板打交道,那么你的桌面迟早会变成灾难现场。设备东一个西一个,电源线缠成一团,散热全靠自然风,找一台机器要拨开三层杂…

作者头像 李华