J'ai une toute nouvelle base de données Oracle qui donne l'erreur:
ORA-01950: no privileges on tablespace 'USERS'
J'ai fait:
alter user kainaw quota 100M on 'USERS';
grant unlimited tablespace to kainaw;
Pourtant, une seule insertion renvoie cette erreur. À part le quota de disque, qu'est-ce qui provoque l'erreur "aucun privilège sur le tablespace 'USERS'"?
MISE À JOUR:
La version Oracle est 11.2.0.3.0 (11g). Je me connecte à partir de l'invite de commandes sur le serveur. Donc, je change l'utilisateur kainaw en sysdba. Ensuite, je me déconnecte et connecte un utilisateur kainaw pour tester:
insert into i.test values (1);
Remarque: i.test est une table avec uniquement un champ numérique. J'obtiens l'erreur ci-dessus. Je me déconnecte en tant que kainaw, je me connecte en tant que sysdba, je joue avec les autorisations, la déconnexion, la connexion, le test, l'erreur, la déconnexion, la connexion, ...
Vous accordez les privilèges à l'utilisateur incorrect.
Le propriétaire du schéma i
est propriétaire de la table et est donc l'utilisateur qui doit se voir accorder les autorisations appropriées sur l'espace disque logique.
C'est parce qu'aucun privilège sur le tablespace. Accordez un quota d'espace de table à l'utilisateur pour résoudre ce problème:
SQL> alter user <your username> quota unlimited on tablespace_name;
SQL> GRANT UNLIMITED TABLESPACE TO <your username>;
Détaillé le ora-0195
Si cela ne fonctionne pas, jetez un œil à la définition de votre table ... en particulier les index. Veuillez consulter cet article sur mon blog pour plus de détails . Vérifier la définition du tablea
Merci, Jason
Il s'agit d'une erreur très courante due à des privilèges insuffisants sur l'espace disque logique. Essayez ça.
SQL>select USERNAME, DEFAULT_TABLESPACE from dba_users where USERNAME='XXXXX';
SQL> alter user USER_NAME DEFAULT TABLESPACE TABLESPC_NAME quota unlimited on TABLESPC_NAME;
Comme d'autres l'ont dit à juste titre, le propriétaire de la table doit avoir la "permission" de stocker des données dans un tablespace, c'est-à-dire un quota dans ce tablespace, pas l'individu à l'origine des données à être stocké.
Ma valeur de tuppence:
N'accordez UN TABLESPACE ILLIMITÉ à aucun utilisateur.
Il leur permet de griffonner des données dans tout Tablespace, y compris les Tablespaces système internes à la base de données, s'ils savent par quoi ils s'appellent.
Gardez les utilisateurs limités et autorisez-les uniquement à écrire dans des espaces de table que vous avez préparés (et dimensionnés) pour eux. Si, comme moi, vous associez des schémas et des espaces disque logiques pour créer des unités restaurables séparément via Tablespace Ppoint-in-Time Recovery (TSPITR) - une stratégie antérieure aux CDB, évidemment - permettant ensuite aux utilisateurs d'écrire des données dans n'importe quel coin ancien de la base de données où ils peuvent trouver de l'espace sape complètement cette stratégie de rétablissement.