oracle用户权限管理(代码片段)

CodeLogs CodeLogs     2022-12-06     452

关键词:

权限的分类

权限,角色和用户的关系
权限(privilege):Oracle数据库预先定义好的、执行某些操作的能力。
角色(role):一组相关权限的集合。可以利用角色来简化权限的管理。
用户(user):通过给用户授予适当的权限或角色,用户就能够登录数据库,在数据库中执行特定的DDL和DML操作。通过回收权限或角色,就能减少用户对数据库的操作能力。

按照权限所针对的控制对象,可以将其分为系统权限、对象权限。

系统权限

系统权限(system privilege):指在系统级控制数据库的存取和使用的机制,即执行某种SQL语句的能力。如,是否能启动、停止数据库,是否能修改数据库参数,是否能连接到数据库,是否能创建、删除、更改方案对象(如表、索引、视图、过程)等。它一般是针对某一类方案对象或非方案对象的某种操作的全局性能力。

在Oracle数据库中,SYSTEM是数据库管理员,他具有DBA角色,即具有DBA角色的所有系统权限,包括SELECT ANY DICTIONARY,所以,他可以查询数据字典中的、以“DBA_”开头的数据字典视图,如DBA_USERS。数据字典视图system_privilege_map中包括了Oracle数据库中的所有系统权限。查询该视图可以了解系统权限的信息。

系统权限的分类:

系统权限总的来说,一类是针对方案对象的,一类是针对非方案对象的。

针对方案对象的系统权限分为具有ANY关键字的(如 CREATE ANY TABLE)和不具有ANY关键字的(如CREATE TABLE)。
具有ANY关键字的系统权限表示可以在任何用户方案中进行操作(如在任何用户方案中都可以创建表);
不具有ANY关键字的系统权限表示只在自己的方案中进行操作(如在自己的方案中可以创建表)。
一般地,应该给数据库管理员授予带有ANY关键字的系统权限,以便其管理所有用户的方案对象。但不应该将其授予普通用户,以防其影响其他用户的工作。

针对非方案对象的系统权限都没有ANY关键字,如CREATE TABLESPACE。因为它们只与数据库管理中全局的、唯一的数据库维护操作有关,而与局部的、非唯一的方案对象操作无关,如表空间是针对数据库的全局的概念,不是针对哪个用户的局部的概念。

对象权限

对象权限(object privilege):指在对象级控制数据库的存取和使用的机制,即访问其他用户的方案对象的能力。如,用户可以存取哪个用户的方案中的哪个对象,是否能对该对象进行查询、插入、更新等。对象权限一般是针对其他用户的某个特定的方案对象的某种操作的局部性能力。

创建对象的用户拥有该对象的所有对象权限,不需要授予。

授权者只能从自己授权的用户那里回收对象权限。用户不能有选择性地回收列权限,必须首先回收该对象权限,然后再将合适的列权限授予用户。
假如基于一个对象权限创建了过程、视图,那么回收该对象权限后,这些过程、视图将变为无效。
回收对象权限会级联。

Oracle数据库中总共有9种不同的对象权限。不同类型的对象有不同的对象权限。有些对象(如集群、索引、触发器、数据库连接)没有对应的对象权限,即他们是通过系统权限来控制的,例如,如要修改集群,用户必须要具有ALTER ANY CLUSTER系统权限。

对象权限的分类:

Oracle数据库的方案对象主要是指:表、索引、视图、序列、同义词、过程、函数、包、触发器。

  1. Alter(更改)
    表上的ALTER权限保证在相关的表上执行ALTER TABLE或LOCK TABLE语句。可以重命名表、添加列、删除列、更改数据类型和列的长度,以及把表转换成一个分区(partitioned)表。
    序列上的ALTER权限可以保证能够在相关序列上执行ALTER SEQUENCE语句,可以重设授权序列对象的最小值、增量和缓冲区大小

  2. Delete(删除)
    允许在授权对象上执行DELETE语句,以便从表或者视图中删除行。SELECT权限必须随同DELETE权限授予,否则被授权的人将不能够选择行,因此也就无法删除行。DELETE权限还允许被授权者锁定相应的表

  3. Execute(运行)
    包上的EXECUTE权限允许被授权者执行或者使用在相应的包规定中声明的任何程序或者程序对象。
    操作符(operator)或者类型(type)上的EXECUTE权限允许在SQL或者PL/SQL中使用该操作符。
    数据库对象上的EXECUTE权限允许被授权者使用相关的数据库对象并且调用其方法。

  4. Index(索引)
    允许被授权者在相关的表上创建索引或者锁定该表。
    当一个方案(schema)拥有一个表而另一个方案拥有其索引的时候,会出现混乱。在授予这种权限时要小心。

  5. Insert(插入)
    允许被授权者在相关的表或视图中创建行。
    如果该INSERT权限建立在相关表或者视图的特定列上,则只能在具有INSERT权限的列上插入数据。
    INSERT权限还隐含地给被授权者以锁定该表的能力

  6. Read(读)
    只能在目录上授予。
    允许被授权者读取指定目录中的BFILE。
    Read权限与SELECT权限有区别,后者允许用户读取一个表或者视图。

  7. Reference(引用)
    只能在表上授予用户,而不能授予角色。
    允许被授权者创建引用该表的参照完整性约束。被授权者可以锁定该表。

  8. Select(选择)
    允许被授权者在表或者视图上执行SELECT语句。
    允许被授权者读取表或者视图的内容。
    SELECT权限只能授予整个表,不能授予表中的列。因此,如果希望用户只能查询表中的部分列,就需要在该表上创建视图,然后将该视图的SELECT权限授予用户。
    序列上的SELECT权限允许被授权者获取当前值(CURRVAL)或者通过选择NEXTVAL增大该值。

  9. Update(更新)
    允许被授权者更改表或者视图中的数据值。SELECT权限必须随同UPDATE权限一起授予,这样就使被授权者隐含具有了锁定表的能力。

权限分配

常用的授权方式

常见的预定义角色包括CONNECT(连接角色)、RESOURCE(资源角色)、DBA(管理员)三种。

# 创建新用户
CREATE USER username IDENTIFIED BY password DEFAULT TABLESPACE tablespace_name;

# 给普通用户授权
GRANT CONNECT,RESOURCE TO username;
# 给管理员用户授权
GRANT CONNECT,RESOURCE,DBA TO username;

# 收回角色权限
REVOKE DBA FROM username;

普通用户的授权方式只允许对自己方案下的对象进行增删改查及导出导入操作,管理员授权方式则可以操作所有用户对象。

创建只读用户

1、创建只读用户(reader)并设置密码

CREATE USER reader IDENTIFIED BY 123456;

2、赋予系统权限

# 创建连接会话权限
GRANT CREATE SESSION TO reader;
# 创建同义词权限(如不使用同义词则不需要授权)
GRANT CREATE SYNONYM TO reader;

3、赋予查询表权限

# 单表授权
GRANT SELECT ON a_czsj_441826.编办人员信息表 TO reader;

# 多表批量授权
SELECT 'GRANT SELECT ON '||owner||'.'||object_name||' TO reader;' 
FROM DBA_OBJECTS 
WHERE OWNER = 'A_CZSJ_441826' and OBJECT_TYPE = 'TABLE';

4、创建同义词

Oracle同义词是数据库方案对象的一个别名,在该示例中属于非强制操作,经常用于简化对象访问和提高对象访问的安全性。

# 创建单表同义词
CREATE SYNONYM reader.编办人信息 FOR a_czsj_441826.编办人员信息表;

# 多表批量创建同义词
SELECT 'CREATE SYNONYM reader.'||OBJECT_NAME||' FOR '||OWNER||'.'||OBJECT_NAME||';' 
FROM DBA_OBJECTS 
WHERE OWNER = 'A_CZSJ_441826' AND OBJECT_TYPE = 'TABLE';

# 创建公共同义词(所有用户都可以访问)
CREATE PUBLIC SYNONYM 公共表说明 FOR a_czsj_441800_2021.表说明;
GRANT SELECT ON 公共表说明 TO PUBLIC;

在reader用户下查询表数据的两种方式:

# 普通查询方式
SELECT * FROM a_czsj_441826.编办人员信息表;

# 同义词查询方式
SELECT * FROM 编办人信息;

用户禁用删除

# 禁用
ALTER USER reader ACCOUNT LOCK;
# 启用
ALTER USER reader ACCOUNT UNLOCK;

# 删除用户
DROP USER reader;
# 删除同义词
DROP [PUBLIC] SYNONYM 公共表说明;

权限查询

权限表查询

  • 查询用户

    SELECT * FROM dba_users;
    SELECT * FROM all_users;
    SELECT * FROM user_users;
    
  • 系统权限

    SELECT * FROM dba_sys_privs;
    SELECT * FROM user_sys_privs;
    
  • 对象权限

    SELECT * FROM dba_tab_privs;
    SELECT * FROM all_tab_privs;
    SELECT * FROM user_tab_privs;
    
  • 角色

    # 查询所有角色
    SELECT * FROM dba_roles;
    # 查询用户角色
    SELECT * FROM dba_role_privs;
    SELECT * FROM user_role_privs;
    # 查询角色权限
    SELECT * FROM role_sys_privs;
    SELECT * FROM role_tab_privs;
    

查询用户权限

查询某个用户的角色

SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'A_CZSJ_441826';

查询某个用户的系统权限

SELECT * FROM DBA_SYS_PRIVS 
WHERE GRANTEE = 'A_CZSJ_441826'
UNION ALL
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE IN (SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'A_CZSJ_441826');

查询某个用户的对象权限

SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTEE = 'A_CZSJ_441826'
UNION ALL
SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTEE IN (SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'A_CZSJ_441826');

oracle11g全新讲解之用户权限管理(代码片段)

...数据库,在一个数据库中,不同的项目由不同的用户访问,每一个用户拥有自身创建的数据库对象,因此用户的概念在Oracle中非常重要。Oracle的用户可以用CREATEUSER命令来创建。其语法是:CREATEUSER用户名IDENTIFIE... 查看详情

mysql的用户管理与权限管理(代码片段)

MySQL的用户管理与权限管理用户管理与权限管理用户管理创建MySQL用户删除MySQL用户修改MySQL用户用户权限管理权限说明给用户授权:grant查询用户权限使用grant创建用户(集创建和授权一体)revoke回收权限用户管理与权... 查看详情

18.用户与权限管理(代码片段)

一、用户管理  MySQL用户可以分为普通用户和root用户。root用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户密码等权限管理;普通用户之只能拥有被授予的各种权限。MySQL提供了许多语句用来管理用户账... 查看详情

mysql---用户和权限管理复习(代码片段)

用户和权限管理复习用户管理1.格式注意权限管理查看用户权限1、查看所有用户(用户名、给谁授权)2、查看单个用户所有情况权限表Grant命令来创建用户并设置权限授权每次更新权限后记得刷新权限--**`FLUSHPRIVILEGES;&... 查看详情

mysql——用户创建和权限管理(代码片段)

文章目录一、用户管理1.创建MySQL用户2.删除MySQL用户3.修改MySQL用户二、权限管理1.权限说明2.权限保存位置(了解)3.给用户授权4.查询用户权限5.withgrantoption选项6.revoke回收权限一、用户管理在mysql库里有个user表可以查看... 查看详情

shiro---了解权限管理(代码片段)

...理一、概念1、什么是权限管理    只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。   &n... 查看详情

用户组权限管理(代码片段)

用户、组和权限管理;mutli-tasks,mutli-usersAuthentication,Authorization,Audition(3A服务器,用于认证鉴权)用户类别:管理员普通用户系统用户登录用户用户表示:usrID,UID2个字节表示管理员:0普通用户,1-65535系统用户:1-499(centos6),1-999... 查看详情

[linux之权限管理⽤户组管理](代码片段)

[Linux之权限管理⽤户组管理]权限管理用户组管理RBAC权限管理RBAC(Role-BasedAccessControl,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成... 查看详情

django—内置用户权限管理(代码片段)

内置用户权限管理对于注册、登录、验证等功能我们可以自己编写用户管理应用,但Django也有一个内置的用户权限管理系统。也是很强大的。在哪可以看到?关于用户的信息都存放在这个表中。 auth模块fromdjango.contribimportauth... 查看详情

django权限管理-后台根据用户权限动态生成菜单(代码片段)

Django权限管理实现目标:1、管理用户,添加角色,用户关联角色2、添加权限、角色关联权限3、添加动作、权限关联动作4、添加菜单、权限关联菜单实现动态生成用户权限菜单(可设置多级菜单嵌套)、根据前台URL自动选中菜... 查看详情

mongodb的权限管理(代码片段)

...的权限管理方案3.mongodb超级管理员账号的创建3.1创建超级用户3.2以权限认证的方式启动mongodb数据库3.3登录验证4.创建普通用户4.1在使用的数据库上创建普通用户4.2在admin用户数据库上创建普通用户5.查看创建的用户6.删除用户6.1进... 查看详情

账号和权限管理(代码片段)

账号和权限管理一、用户账号和组账号基本概述用户账号用户账号说明超级用户root用户,对主机拥有最该权限。系统中超级用户是唯一的普通用户由root用户和其他管理员创建,拥有的权限会受到限制,一般只在用户... 查看详情

jenkins用户角色权限管理(代码片段)

...录背景安装插件管理角色全局角色项目角色节点角色管理用户分配角色背景Jenkins一般用作团队项目持续集成环境,所以就会设计多用户的情况,我们需要为不同人员设置不同的角色,进行权限管理。可以使用Role-based-... 查看详情

jenkins用户角色权限管理(代码片段)

...录背景安装插件管理角色全局角色项目角色节点角色管理用户分配角色背景Jenkins一般用作团队项目持续集成环境,所以就会设计多用户的情况,我们需要为不同人员设置不同的角色,进行权限管理。可以使用Role-based-... 查看详情

mysql权限管理(代码片段)

.../20星期一//这是mysql的权限问题具体的详情见第三章《mysql用户及赋予用户权限grant》现在有一个需求,就是指定一个用户对一个数据库中的所有表只有只读权限mysql用户及赋予用户权限grant我们在我们的dev环境的192.168.0.36上进行试... 查看详情

文件管理用户及组管理用户及权限管理(代码片段)

文件管理:cp、mv、rm复制命令:cpcp[option]...[-T]sourcedestcp[option]...source...directorycp[option]...-tdirectorysource...cpsrcdest如果目标文件不存在,则新建目标,并将源文件中的内容填充到目标文件中;[[email protected]~]#ls/tmpgconfd-rootmap 查看详情

mysql用户操作和权限管理(代码片段)

用户操作与权限管理MySQL用户操作创建用户方法一:CREATEUSER语句创建CREATEUSER"用户名"@"IP地址"IDENTIFIEDBY"密码";方法二:INSERT语句创建INSERTINTOmysql.user(user,host,password,ssl_cipher,x509_issuer,x509_subject)VALUES(‘用户名’,&rsquo 查看详情

greeplum系列权限管理(代码片段)

Greeplum系列(七)权限管理一、角色管理Role分为用户(User)和组(Group),用户有login权限,组用来管理用户,一般不会有login权限。初始化gp时创建了一个SUPERUSERROLE:gpadmin。表1:ALTERROLE属性属性说明SUPERUSER/NOSUPERUSER超级管理员,默... 查看详情