的Informix-SQL(SE)4.10.DD6(MS-DOS 6.22):表權限問題試圖刪除表時
我作爲創建的表: 「pcuser」 .tablename。我試圖用,以刪除該表:
DROP TABLE tablename;
並收到以下錯誤消息:
545: No write permission for table pcuser.tablename.
由於我的應用程序是單用戶,我不關心限制任何表的權限,我安裝了不帶密碼保護的ISQL 4.10(即啓動SE引擎時不需要用戶名或密碼)。所以默認和唯一的用戶名/表所有者總是「pcuser」。使用ISQL 2.10時,在刪除,創建,讀取或寫入表格時,我不必指定「table-owner」.tablename。不過,我確實授予了所有公共桌面名稱並將dba授予公衆。我還在4.10中執行了同樣的授權聲明。
刪除表就像當我必須指定表的所有者:
DROP TABLE "pcuser".tablename;
對不起,我沒有爲ISQL 4.10的文檔。
以下是表名SYSTABAUTH和SYSTABLES行perform.out屏幕輸出:
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 [ ]
[ ]
下面是我的應用程序兩個SQL特效。第一個正常的高管,但第二個失敗,在DROP TABLE語句中的ERR 545:
{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....
通常不需要定位文件 - 那麼如果在創建步驟中刪除IN子句,會發生什麼情況? DROP步驟是否有效?如果你保持TABLENAME組件爲DOS 8.3格式(所以你指定'IN「C:\ DBFILES.DBS \ TBLNAME」')? – 2010-07-19 05:05:28
@Jonathan:「CREATE TABLE ... IN ...」正常工作!我使用它的原因是爲了避免SE將它的日誌數字追加到SE文件名的前五個字母,例如SYSME101.DAT ..你認爲這可能是SQL腳本中寫入perm錯誤的原因嗎?..我使用ISQL中的表名最多爲8個字符,我只是使用「TABLENAME」來描述示例。在ISQL 4.10(DOS)以及2.10中,如果您使用多於8個字符的表名,DOS將截斷8以上的任何內容,從而強制執行8.3 ..我只是將SYSTABAUTH行值添加到問題中。這個問題沒有發生在2.10! – 2010-07-19 05:27:18
@Jonathan:當我安裝ISQL 2.10(DOS)時,我選擇了用戶名/密碼選項,這樣除非用戶提供了正確的用戶名和密碼,否則沒有人可以啓動SE引擎。這也允許我以用戶informix的身份登錄,這樣我就可以操作.DBS目錄中的所有SYS *表(主要是爲了更改SYSTABLES cuz SE的.DAT和.IDX默認命名方法在更改表時引入問題,以後我使用CREATE TABLE時會引起問題。 ..在「C:\ DBFILES.DBS \ TABLENAM」; – 2010-07-19 05:37:00