首页 > 数据库 >成为MySQL DBA后,再看ORACLE数据库(九、用户与权限)

成为MySQL DBA后,再看ORACLE数据库(九、用户与权限)

时间:2024-06-14 22:34:11浏览次数:14  
标签:角色 DBA 数据库 用户 对象 MySQL ORACLE 权限

数据库的用户和权限的管理是DBA日常运维工作中的重要组成部分,不同数据库的用户权限体系及管理方式也会有差别,本文将对ORACLE的用户权限体系和常用操作进行一个总结。

一、用户管理

ORACLE中创建用户语句和mysql一样,不同的是mysql可以在用户后面加ip以实现ip层面的访问控制。在ORACLE中,创建用户即创建同名schema。记得初学ORACLE时就搞不懂schema的概念,后来理解了其实schema就是指数据库对象的集合,包括表、视图、存储过程等等,在ORACLE中这个集合是集合到用户下,而在MySQL中这个集合是集合到数据库下,所以在MySQL中database即schema。另外在SQLServer和PG中,在实例下的数据库下面还有一层schema的概念,这就和ORACLE、MySQL都不一样,可以说在对数据库对象管理的层次上面又多了一层。在ORACLE中可以通过conn user/password命令切换不同的用户,在删除用户时需要加上cascade:drop user user_name [cascade],这样才可以级联删除该用户下面的数据库对象。

二、系统权限

ORACLE的用户权限可以分为系统权限、对象权限以及角色权限。其中系统权限是指执行特定类型SQL命令的权限,它用于控制用户可以执行的一个或一组数据库操作,常用的系统权限包括create session,create table等,新创建的用户至少要授予create session才可以连接数据库。

系统权限中对数据对象加上any,比如create any table,表示可以在任意用户中进行操作。通过查询视图dba_sys_privs可以获取用户的系统权限,其中select any table权限是指可以访问其他用户所有的表,但是仍然无法查询dba_数据字典视图,这个需要select any dictionary权限。

三、对象权限

对象权限就是指针对数据库对象的权限,比如对表的增删改查权限。在ORACLE中,对象的拥有者拥有对象的所有权限,比如用户创建了一个对象,该用户拥有这个对象的所有权限,并且对象的拥有者可以向外分配权限。通过数据字典视图dba_tab_privs可以查询用户拥有的对象权限。

四、角色权限

角色可以理解为一些权限的集合,角色的作用是用来简化权限的管理。我们可以创建一个角色,再将一些系统权限或对象权限一并赋予给这些创建的角色,再把这个角色赋予给用户,此时该用户就拥有这个角色下的所有权限。在ORACLE中,使用最多的还是两个系统角色,connect和resource。创建应用用户时可以给用户connect和resource角色这样该用户就可以满足大多数业务场景的需要,此外也可以把connect和resource角色授给不同的用户以实现权限管控和隔离。查询系统视图role_sys_privs和role_tab_privs可以分别查询角色拥有的系统权限和对象权限。通过查询dba_role_privs视图可以查询用户拥有哪些角色。

五、总结

除了以上几类用户权限,还有一种权限叫做列权限,即对表的某一列或几列赋权,在对表的精细化权限管理时会用到。由于mysql的用户和schema是分离的,所以mysql的权限管理看上去也更简单,mysql在8.0以后才支持角色权限,但是实际中也很少用到,而ORACLE的两个系统角色帮助管理员简化了用户权限的管理。mysql中可以通过show grants语句很方便查看用户的授权语句,在ORACLE可以通过拼接sql的方式导出用户的授权语句:

#对象权限授权语句
select 'grant '||PRIVILEGE||' on '||OWNER||'.'||TABLE_NAME||' to '||GRANTEE||';' from dba_tab_privs where GRANTEE='APP2';
#系统权限授权语句
select 'grant '||PRIVILEGE||' to '||GRANTEE||';' from dba_sys_privs where GRANTEE='APP2';
#角色授权语句
select 'grant '||GRANTED_ROLE||' to '||GRANTEE||';' from dba_role_privs where GRANTEE='APP2';

标签:角色,DBA,数据库,用户,对象,MySQL,ORACLE,权限
From: https://www.cnblogs.com/coygfly/p/18246787

相关文章

  • MySQL的连接工具navicat报argument out of range解决办法
    MySQL5.7.22查询时候报错argumentoutofrange报错代码原因sql_mode模式导致参考sql_mode默认配置showvariableslike'sql_mode';ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO......
  • MySQL数据库管理
    目录1.MySQL数据库管理1.1常用的数据类型​编辑1.2char和varchar区别2.增删改查命令操作2.1查看数据库结构2.2SQL语言2.3创建及删除数据库和表2.4 管理表中的数据记录2.5修改表名和表结构3.MySQL的6大约束属性1.MySQL数据库管理1.1常用的数据类型1.2c......
  • MySQL入门学习-聚合和分组.子查询.相关子查询
        在MySQL中,子查询是指在一个查询语句中嵌套另一个查询语句。子查询可以分为相关子查询和非相关子查询两种类型。    相关子查询是指子查询的执行结果依赖于外部查询中的值。在执行相关子查询时,MySQL会先执行外部查询,然后根据外部查询的结果来执行子查询......
  • MySQL 游标遍历每一行数据做处理。
     delimiter$$--分隔标记CREATEPROCEDUREprocess_test()begin--声明变量declareSuoshuQY_pvarchar(255);declaredoneint;declarecurcursorforSELECTSuoshuQYasSuoshuQY_pFROMdiy_cabinet_listWHEREIsDeleted=0;declareco......
  • Java最全知识脑图 涵盖 juc mysql git mybatis 等 面试必备
    Java初中级知识脑图面试超实用1.Git下载链接导图下载地址:https://mm.edrawsoft.cn/mobile-share/index.html?uuid=31d00742157057-src&share_type=12.JUC下载链接https://mm.edrawsoft.cn/mobile-share/index.html?uuid=6c0be457444921-src&share_type=13.JVM下载链......
  • 毕业设计课题:快餐店点餐结算系统,基于java+SSM+mysql
     一、前言介绍        快餐店点餐结算系统可以对快餐店点餐结算系统信息进行集中管理,可以真正避免传统管理的缺陷。快餐店点餐结算系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处......
  • Navicat for MySQL 11软件下载及安装教程
    NavicatforMySQL是一款强大的MySQL数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具,但对于新用户仍然易于学习。NavicatforMySQL基于Windows平台,为MySQL量身订作,提供类似于MySQL的用管理界面工具,此解决方案的出现,将解放PHP、J2EE等程序员以及......
  • java oracle easypoi 百万数据导出
    privatestaticfinalIntegerpageSize=100000;/***zcc*@paramfixmedinsCode*@paramtitle*@paramsheetName*/publicvoidexportAudtMorethanVo(StringfixmedinsCode,Stringtitle,StringsheetName){StringfilePa......
  • 运维shell脚本之测试mysql密码正确与否
    shell脚本实战:测试mysql密码正确与否在迁移过程中,常有批量迁移数据库的情况,因此在割接前,需要批量测试一次割接后的数据库信息是否配置正常,故写了一个shell脚本用于测试数据库密码是否正确有误,具体步骤如下:测试前,需要测试当前服务器是否已安装mysql,可通过命令进行测试:mysq......
  • MySql 表数据的增、删、改、查
    数据表的增、删、改、查前言在学习MySql一定少不了对数据表的增、删、改、查,下面将详细讲解如何操作数据表。前面已经建好了表customer列表如下:插入数据插入数据可以使用INSERT语句,语法格式如下:INSERTINTO表名(列名1,列名2,列名3,...)VALUES(值1,值2,值3,......