Informix-SQL (SE) 4.10.DD6 (MS-DOS 6,22):Tableau des problèmes d'autorisation lorsque vous tentez de supprimer une table
J'ai une table créée comme: "pcuser" .tablename. J'ai essayé de laisser tomber cette table avec:
DROP TABLE tablename;
et reçu le message d'erreur suivant:
545: No write permission for table pcuser.tablename.
Depuis mon application est mono-utilisateur et je ne suis pas concerné par la restriction des privilèges pour une table, je ISQL 4.10 installé sans protection par mot de passe (aucun nom d'utilisateur ou mot de passe n'est requis pour démarrer le moteur SE). Ainsi, le nom d'utilisateur et le propriétaire de la table par défaut et uniquement les utilisateurs sont toujours "pcuser". Avec ISQL 2.10, je n'ai pas eu à spécifier "table-owner" .tablename lors de la suppression, la création, la lecture ou l'écriture dans une table. Cependant j'ai tout donné sur le nom de table au public et j'accorde dba au public. J'ai également exécuté les mêmes déclarations de subvention en 4.10.
Dois-je préciser le propriétaire de la table lors de la suppression d'une table comme:
DROP TABLE "pcuser".tablename;
Désolé, je n'ai pas la documentation ISQL 4.10.
Voici les sorties d'écran perform.out de ligne SYSTABAUTH et SYSTABLES pour tablename:
SYSTABAUTH:
grantor [pcuser ]
grantee [public ]
tabid [102 ]
tabauth [su-idxa]
SYSTABLES:
tabname [tablename ]
owner [pcuser ]
dirpath [C:\DBFILES.DBS\TABLENAME ]
[ ]
tabid [102 ]
rowsize [256 ]
ncols [48 ]
nindexes [5 ]
nrows [1082594 ]
created [07-13-2010]
version [9 ]
tabtype [T]
audpath [ ]
[ ]
Voici deux procs sql dans mon application. Le premier execs correctement, mais la seconde échoue avec l'err 545 sur la déclaration drop table:
{CREATEDB.SQL - First SQL Proc}
DROP DATABASE dbfiles;
CREATE DATABASE dbfiles;
CREATE TABLE tablename
(
col1 char(18),
col2 char(60),
[...]
) in "C:\DBFILES.DBS\TABLENAME";
LOAD FROM "tablename.unl" INSERT INTO tablename;
CREATE UNIQUE INDEX tablename_idx1 ON tablename (col1);
GRANT ALL ON tablename TO PUBLIC;
GRANT DBA TO PUBLIC;
UPDATE STATISTICS;
---
{DROPTAB.SQL - Second SQL Proc}
DROP TABLE tablename;
^
ERROR 545: No Write Permission....
Normalement, vous n'avez pas besoin de localiser les fichiers. Que se passe-t-il si vous supprimez la clause IN dans l'étape de création? Est-ce que l'étape DROP fonctionne? Qu'en est-il si vous gardez le composant TABLENAME au format DOS 8.3 (donc vous spécifiez 'IN" C: \ DBFILES.DBS \ TBLNAME "')? –
@Jonathan: Le "CREATE TABLE ... IN ..." fonctionne bien! La raison pour laquelle je l'utilise est d'éviter SE d'ajouter ses numéros de journalisation aux cinq premières lettres de noms de fichiers SE comme par exemple SYSME101.DAT .. Pensez-vous que cela pourrait être la cause des erreurs d'écriture perm dans les scripts sql? 8 caractères max pour les noms de tables dans ISQL, je viens d'utiliser "TABLENAME" pour décrire des exemples. Dans ISQL 4.10 (DOS), ainsi que 2.10, si vous utilisez plus de 8 caractères pour les noms de table, DOS tronque quoi que ce soit sur 8, appliquant ainsi 8.3. J'ai juste ajouté les valeurs de ligne SYSTABAUTH à la question. Ce problème n'est pas arrivé avec 2.10! –
@Jonathan: Lorsque j'ai installé ISQL 2.10 (DOS), j'ai choisi l'option nom d'utilisateur/mot de passe pour que personne ne puisse lancer le moteur SE à moins de fournir le bon identifiant et le bon mot de passe. Cela m'a également permis de me connecter en tant qu'informix utilisateur afin que je puisse manipuler toutes les tables SYS * dans le répertoire .DBS (principalement pour modifier SYSTABLES cuz SE .DAT et .IDX méthode de dénomination par défaut introduit des problèmes lors de la modification des tables, plus tard en utilisant CREATE TABLE. .. "C: \ DBFILES.DBS \ TABLENAM"; –