J'ai un test de schéma que Schema a possède son propre "test" de table de table. Mais lorsque je crée une index sur les utilisateurs de tablespace, il a créé. Comment puis-je limiter à utiliser les utilisateurs de table à table dans la base de données Oracle?
CREATE UNIQUE INDEX "TEST"."INDEX1" ON "TEST"."TESTTABLE" ("TESTNO")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
Le succès informatique, je veux que l'utilisateur de test ne puisse créer aucun objet sur les utilisateurs à table Espace. Il possède son propre espace de table de test. Y a-t-il une configuration? Si l'utilisateur utilise l'espace de table "test" au lieu de "utilisateurs" de table de table?
L'utilisateur TEST
peut avoir le UNLIMITED TABLESPACE
Privilège ou un quota défini sur le USERS
tablespace. Pour les révoquer:
revoke unlimited tablespace from test;
alter user test quota 0 on users;
Si l'utilisateur avait le UNLIMITED TABLESPACE
Privilège sans aucun quota défini, vous devez définir un quota sur le TEST
tableespace, de sorte que l'utilisateur puisse l'utiliser à nouveau après les commandes ci-dessus:
alter user test quota unlimited on test;
+1 Pour la réponse de Balazs et souhaitez partager un scénario ici.
Si vous accordez RESOURCE
rôle à n'importe quel utilisateur, l'utilisateur obtient UNLIMITED TABLESPACE
Privilège (avant 12c) qui permet à l'utilisateur de créer ses objets sur n'importe quel espace de table. Vous pouvez toujours créer index (vous avez CREATE TABLE
privilège) sur le USERS
tablespace après révocation UNLIMITED TABLESPACE
Privilège de TEST
utilisateur mais vous ne pouvez pas insérer de données à ce sujet parce que vous devriez avoir un quota de le faire.
Voici la démo:
SQL> create tablespace test_tbs datafile '/u01/app/Oracle/oradata/orcl/test_tbs.dbf' size 50M;
Tablespace created.
SQL> create user test identified by test default tablespace test_tbs quota unlimited on test_tbs;
User created.
SQL> grant create session, resource to test;
Grant succeeded.
SQL> conn test/test
Connected.
SQL> create table testtable(testno number);
Table created.
SQL> CREATE UNIQUE INDEX "TEST"."INDEX1" ON "TEST"."TESTTABLE" ("TESTNO")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"; 2 3 4 5 6
Index created.
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
10 rows selected.
SQL> conn / as sysdba
Connected.
SQL> revoke unlimited tablespace from test;
Revoke succeeded.
SQL> alter user test quota 0 on users;
User altered.
SQL> conn test/test
Connected.
SQL> drop index index1;
Index dropped.
SQL> CREATE UNIQUE INDEX "TEST"."INDEX1" ON "TEST"."TESTTABLE" ("TESTNO")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"; 2 3 4 5 6
Index created.
SQL> insert into testtable values(1);
insert into testtable values(1)
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'TEST_TBS'
SQL> conn / as sysdba
Connected.
SQL> alter user test quota unlimited on test_tbs;
User altered.
SQL> conn test/test
Connected.
SQL> insert into testtable values(1);
insert into testtable values(1)
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'USERS'