Quel est le quota par défaut sur un espace de table pour un utilisateur donné dans oracle si vous n’en définissez pas un ' ?
Mon environnement
J’utilise Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Explication de la situation
Je créais un utilisateur avec la commande suivante
create user USRPRACTICA2 identified by 1234 default tablespace users;
Donc ok, je lui ai attribué un espace de table par défaut, mais JE N’AI SPÉCIFIÉ aucune limite de quota. Alors je suis allé aux documents Oracle, et j’ai lu ceci:
Par défaut, un utilisateur n’a aucun quota sur un espace de table dans la base de données. Si l’utilisateur a le privilège de créer un objet de schéma, vous devez lui attribuer un quota pour lui permettre de créer des objets. De manière minimale, attribuez aux utilisateurs un quota pour l’espace de table par défaut et des quotas supplémentaires pour les autres espaces de table dans lesquels ils peuvent créer des objets.
Alors j’ai bien dit, ok! Maintenant, je veux tester si cet utilisateur NE PEUT vraiment PAS créer de tables par exemple, si je ne lui ai pas attribué de quota.
Ensuite, je lui ai accordé ces privilèges:
grant create session to USRPRACTICA2;grant create table to USRPRACTICA2;
Eh bien, maintenant je ne devrais pas pouvoir créer de tables car je n’ai pas spécifié de quota sur les utilisateurs d’espace de table. Essayons.
Je crée une connexion avec USRPRACTICA2 à oracle, j’essaie de créer une table, et c’est ce qui se passe:
SQL> CREATE TABLE EMP 2 (EMPNO NUMBER(4) NOT NULL, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), 6 HIREDATE DATE, 7 SAL NUMBER(7, 2), 8 COMM NUMBER(7, 2), 9 DEPTNO NUMBER(2));Tabla creada.
Oups! La table a été créée.
En ce moment, je me dis: « eh bien, nous devrions maintenant essayer de déterminer quel est le quota attribué à cet utilisateur sur cet espace de table, peut-être qu’il y a un quota par défaut dans oracle ». J’ai donc essayé ceci:
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';no rows selected
À ce stade, je pensais « c’est un non-sens, peut-être que je n’ai pas écrit la requête correctement », alors j’ai essayé ceci:
SQL> select * from dba_ts_quotas;TABLESPACE_NAME USERNAME BYTES MAX_BYTES BLOCKS MAX_BLO------------------------------ -------------------------------------------------------------------------------------------------------------------------------- ---------- ---------- ----------SYSAUX AUDSYS 655360 -1 80SYSAUX GSMADMIN_INTERNAL 917504 -1 112SYSAUX DBSFWUSER 0 -1 0SYSAUX APPQOSSYS 0 -1 0SYSAUX GGSYS 0 -1 0SYSAUX OLAPSYS 0 -1 06 rows selected.
Donc, avec ces informations, j’ai deviné que, à coup sûr, aucun quota n’a été attribué à l’espace de table des utilisateurs pour l’utilisateur que j’ai créé.
De plus, j’ai deviné que dans oracle, il devrait être stocké une valeur avec le quota par défaut sur les espaces de table si vous n’en définissez pas une. De plus, cet utilisateur n’a pas non plus d’espace illimité sur l’espace de table, car il serait apparu dans cette vue avec une valeur « MAX_BYTES -1 ».
J’ai beaucoup parcouru à la recherche d’une valeur de quota par défaut dans oracle, et tout ce que j’ai pu obtenir est cet extrait d’oracle disant « Si l’utilisateur a le privilège de créer un objet de schéma, vous devez attribuer un quota pour permettre à l’utilisateur de créer des objets ». Mais évidemment, comme je l’ai montré ici, Ce devrait être une valeur de quota par défaut quelque part.
Pour finir, j’ai juste essayé autre chose. Si vous attribuez une valeur de quota à l’utilisateur comme ceci
alter user USRPRACTICA2 quota 1M on USERS;
Maintenant, si vous interrogez les quotas d’espace de table, vous trouverez les informations
SQL> select tablespace_name, username, max_bytes 2 from dba_ts_quotas 3 where username = 'USRPRACTICA2' and TABLESPACE_NAME = 'USERS';TABLE USERNAME MAX_BYTES----- ------------ ----------USERS USRPRACTICA2 1048576
Donc ma question ici est…
Existe-t-il une valeur de quota par défaut attribuée à un utilisateur dans un espace de table si vous ne la spécifiez pas ? Si oui, comment puis-je montrer cette valeur?