recherche
Maisonbase de donnéestutoriel mysql如何控制common user在cdb里对于pdb信息的访问

研究common user要在不同的pdb间切换所需具有的权限;研究common user在cdb上查询container_data_objects时如何限制其只能访问到

本文目的:
研究common user要在不同的pdb间切换所需具有的权限;
研究common user在cdb上查询container_data_objects时如何限制其只能访问到某几个pdb对应的信息或者在某个特定的container_data_object对象上限制其只能访问到某几个pdb对应的信息,common user一般都有比较大的权限,但有的时候我们不想让common user通过cdb里的视图去访问到某些pdb的信息

先解释一下container_data_object的概念:Dba_table、dba_views中container_data=’Y’对应的表或视图,因为这些视图中包含了来自不同pdb的信息,所以被称作container_data_object

1、 只有common user才能使用alter session set container=PDBX在各个pdb间进行切换,前提是这个common user必须在这些pdb里至少具有create session 和 set container权限:

---在cdb里创建一个common user,赋予create session权限

SQL> show con_name

 

CON_NAME

------------------------------

CDB$ROOT

SQL> create user c##guser2 identified by 773946 container=all;

 

User created.

   

SQL> grant create session to c##guser2; 

 

Grant succeeded.

 

 

---以刚创建的c##guser2用户登陆cdb,,set container到orapdba提示权限不足

oracle@ora12c1:/home/oracle>sqlplus c##guser2/773946

 

SQL*Plus: Release 12.1.0.1.0 Production on Thu Dec 12 21:22:44 2013

 

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

 

 

Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Advanced Analytics and Real Application Testing options

 

SQL> alter session set container=orapdba;

ERROR:

ORA-01031: insufficient privileges

 

--[C1] -在orapdba里,grant set container权限给c##guser2

SQL> show con_name

 

CON_NAME

------------------------------

ORAPDBA

 

SQL> grant set container,create session to c##guser2;

 

Grant succeeded.

 

--- set container到orapdba成功

SQL> show con_name

 

CON_NAME

------------------------------

CDB$ROOT

 

SQL> alter session set container=orapdba;

 

Session altered.

 

结论:common user用户要在不同的pdb间实现切换,必须在这些pdb上拥有create session和set container的权限,最简单的方法是在cdb上执行grant create session,set container to c##guser2 container=all进行全局的赋权

 

2、 通过alter user中的container_data_clause 进行container_data_objects访问权限控制:

---全局授权c##guser2查询系统视图的权限

SQL> grant select_catalog_role to c##guser2 container=all;

 

Grant succeeded.

 

---[C2] 以c##guser2登陆cdb$root查询cdb_data_files、v$session两个视图的内容

SQL> show user

USER is "C##GUSER2"

 

SQL> show con_name

 

CON_NAME

------------------------------

CDB$ROOT

SQL> select distinct con_id from v$session;

 

    CON_ID

----------

        1

        0

 

SQL> select distinct con_id from cdb_data_files;

 

    CON_ID

----------

        1

 

---开放给c##guser2用户查询特定pdb上信息的权限

SQL> show user

USER is "SYS"

SQL> show con_name

 

CON_NAME

------------------------------

CDB$ROOT

 

SQL> alter user c##guser2 set container_data=(CDB$root[C3] ,orapdba,orapdbb) container=current;

 

User altered.

 

---查询cdb_container_data可以看到c##guser2用户具有在部分pdb上查询container_data_object的权限

select * from CDB_container_data where username='C##GUSER2';

Grant succeeded.


---再次以c##guser2登陆cdb$root查询cdb_data_files、v$session两个视图的内容,能查到除了0、1之外的其它pdb的信息了
 

 

SQL> select distinct con_id from v$session;

 

    CON_ID

----------

        1

        4

        3

        0

 

SQL> select distinct con_id from cdb_data_files;

 

    CON_ID

----------

        4

        3

        1

 

---对于v$session视图限制c##guser2只能访问orapdba相关的信息

SQL> alter user c##guser2 set container_data=(CDB$root,orapdba) for v$session container=current;

 

---cdb_container_data中又增加了两行基于特定对象的控制信息

select * from CDB_container_data where username='C##GUSER2'

---以c##guser2登陆Root查询cdb_data_files、v$session两个视图的内容,发现还是能查到con_id=4,即orapdbb的记录

SQL> select distinct con_id from v$session;

 

    CON_ID

----------

        1

        4

        3

        0

SQL> select distinct con_id from cdb_data_files;

 

    CON_ID

----------

        4

        3

        1

 

---原因在于红色的部分还是生效的

---去除对于orapdbb的访问权限

SQL> alter user c##guser2 remove container_data=(orapdbb) container=current;

 

User altered.

 

---以c##guser2登陆Root查询cdb_data_files、v$session两个视图的内容,就不见了

con_id=4的记录

SQL> select distinct con_id from v$session;

 

    CON_ID

----------

        1

        3

        0

 

SQL>  select distinct con_id from cdb_data_files;

 

    CON_ID

----------

        3

        1

 

---对于v$session视图限制放宽让c##guser2也能访问orapdbb相关的信息

SQL> alter user c##guser2 add container_data=(orapdbb) for v$session 

container=current;

 

User altered.

 

---以c##guser2登陆Root查询v$session视图又能看见con_id=4的记录,但

cdb_data_files里依然没有con_id=4的记录

User altered.

 
 [C1]此处未授权create session也可以set container成功,实际操作时还是同时附上create session比较好

 [C2]由于c##guser2未进行任何的container_data设置,也即相当于设置了set container_data=default,所以只能看到con_id=0、con_id=1的记录,0代表整个CDB,1代表CDB$ROOT

 [C3]必须包含Root,否则会报ORA-65057错误

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

本文永久更新链接地址: 

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Comment les licences de MySQL se comparent-elles aux autres systèmes de base de données?Comment les licences de MySQL se comparent-elles aux autres systèmes de base de données?Apr 25, 2025 am 12:26 AM

MySQL utilise une licence GPL. 1) La licence GPL permet l'utilisation, la modification et la distribution gratuites de MySQL, mais la distribution modifiée doit se conformer à GPL. 2) Les licences commerciales peuvent éviter les modifications publiques et conviennent aux applications commerciales qui nécessitent de la confidentialité.

Quand choisissez-vous InNODB sur Myisam, et vice versa?Quand choisissez-vous InNODB sur Myisam, et vice versa?Apr 25, 2025 am 12:22 AM

Les situations lors du choix d'innodb au lieu de Myisam incluent: 1) le support de transaction, 2) un environnement de concurrence élevé, 3) une cohérence élevée des données; Inversement, la situation où le choix de Myisam comprend: 1) la lecture principalement des opérations, 2) Aucun support de transaction n'est requis. INNODB convient aux applications qui nécessitent une cohérence élevée des données et un traitement des transactions, telles que les plates-formes de commerce électronique, tandis que Myisam convient aux applications en lecture et sans transaction telles que les systèmes de blog.

Expliquez le but des clés étrangères dans MySQL.Expliquez le but des clés étrangères dans MySQL.Apr 25, 2025 am 12:17 AM

Dans MySQL, la fonction des clés étrangères est d'établir la relation entre les tables et d'assurer la cohérence et l'intégrité des données. Les clés étrangères maintiennent l'efficacité des données grâce à des contrôles d'intégrité de référence et aux opérations en cascade. Faites attention à l'optimisation des performances et évitez les erreurs courantes lorsque vous les utilisez.

Quels sont les différents types d'index dans MySQL?Quels sont les différents types d'index dans MySQL?Apr 25, 2025 am 12:12 AM

Il existe quatre types d'index principaux dans l'index MySQL: B-Tree, index de hachage, index complet et index spatial. 1.B L'indice de tree est adapté à la requête, au tri et au regroupement des plages, et convient à la création sur la colonne du nom du tableau des employés. 2. L'indice de hachage convient aux requêtes équivalentes et convient à la création sur la colonne ID de la table Hash_Table du moteur de stockage de mémoire. 3. L'index de texte complet est utilisé pour la recherche de texte, adapté à la création sur la colonne de contenu de la table des articles. 4. L'indice spatial est utilisé pour la requête géospatiale, adaptée à la création sur le tableau des colonnes GEOM des emplacements.

Comment créez-vous un index dans MySQL?Comment créez-vous un index dans MySQL?Apr 25, 2025 am 12:06 AM

TOCREATEANIDEXINMYSQL, USETHECREATEIDEXSTAMENT.1) ForasingLeColumn, utilisez "CreateIndexidx_lastNameOnPloyes (LastName);" 2) ForacompositeIndex, utilisez "CreateIndexidx_NameonEmployes (LastName, FirstName);" 3)

En quoi MySQL diffère-t-il de SQLite?En quoi MySQL diffère-t-il de SQLite?Apr 24, 2025 am 12:12 AM

La principale différence entre MySQL et SQLite est le concept de conception et les scénarios d'utilisation: 1. MySQL convient aux grandes applications et aux solutions de niveau d'entreprise, en soutenant les performances élevées et la concurrence élevée; 2. SQLITE convient aux applications mobiles et aux logiciels de bureau, légers et faciles à intégrer.

Quels sont les index dans MySQL et comment améliorent-ils les performances?Quels sont les index dans MySQL et comment améliorent-ils les performances?Apr 24, 2025 am 12:09 AM

Les index dans MySQL sont une structure ordonnée d'une ou plusieurs colonnes dans une table de base de données, utilisée pour accélérer la récupération de données. 1) Les index améliorent la vitesse de requête en réduisant la quantité de données numérisées. 2) L'indice de B-Tree utilise une structure d'arbre équilibrée, qui convient à la requête et au tri de la plage. 3) Utilisez des instructions CreateIndex pour créer des index, tels que CreateIndexidx_Customer_idonorders (Customer_ID). 4) Les index composites peuvent optimiser les requêtes multi-colonnes, telles que CreateIndexidx_Customer_OrderOnorders (Customer_ID, ORDER_DATE). 5) Utiliser Expliquer pour analyser les plans de requête et éviter

Expliquez comment utiliser les transactions dans MySQL pour assurer la cohérence des données.Expliquez comment utiliser les transactions dans MySQL pour assurer la cohérence des données.Apr 24, 2025 am 12:09 AM

L'utilisation de transactions dans MySQL assure la cohérence des données. 1) Démarrez la transaction via StartRansaction, puis exécutez les opérations SQL et soumettez-la avec un engagement ou un rollback. 2) Utilisez SavePoint pour définir un point de sauvegarde pour permettre un retour en arrière partiel. 3) Les suggestions d'optimisation des performances incluent le raccourcissement du temps de transaction, d'éviter les requêtes à grande échelle et d'utiliser raisonnablement les niveaux d'isolement.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft