小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Informix 的用戶權(quán)限管理...

 昵稱90415 2009-02-24
Informix 的用戶權(quán)限管理
 
作者:Wing  出處:Unix愛(ài)好者家園unix-cd.com  更新時(shí)間: 2005年12月14日 

有關(guān)數(shù)據(jù)庫(kù)的權(quán)限

 

  存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)于一個(gè)商務(wù)活動(dòng)來(lái)說(shuō)是非常重要的。不僅要通過(guò)備份和制作日志來(lái)保證數(shù)據(jù)的不丟失,還要通過(guò)設(shè)置不同的訪問(wèn)權(quán)限來(lái)防止來(lái)自用戶的善意的或惡意的破壞。一個(gè)公司不可能總是使用一個(gè)完全獨(dú)立的數(shù)據(jù)庫(kù)系統(tǒng)來(lái)保存雇員的工資信息。工資信息可能是與是保存在通常的數(shù)據(jù)庫(kù)中,這樣你就不需要兩臺(tái)機(jī)器和兩個(gè)數(shù)據(jù)庫(kù)服務(wù)軟件包。即使你在一臺(tái)服務(wù)中使用了兩個(gè)完全獨(dú)立的數(shù)據(jù)庫(kù),針對(duì)每個(gè)用戶確定其訪問(wèn)數(shù)據(jù)庫(kù)、數(shù)據(jù)表以及數(shù)據(jù)字段的權(quán)限還是很必要的。

  而目前眾多的數(shù)據(jù)庫(kù)管理系統(tǒng)總是更習(xí)慣于將用戶權(quán)限的管理完全交給Application來(lái)完成。而真正操作數(shù)據(jù)庫(kù)的往往是諸如DBA這樣的擁有超級(jí)權(quán)限的數(shù)據(jù)庫(kù)用戶。我不能說(shuō)這樣的系統(tǒng)就一定會(huì)出安全性問(wèn)題,但是至少這種做法會(huì)帶來(lái)有關(guān)安全性的隱患。對(duì)于數(shù)據(jù)庫(kù)用戶權(quán)限的設(shè)置,絕大多數(shù)成熟的數(shù)據(jù)庫(kù)都提供了一種大同小異的做法。我們這里以Informix為例,僅僅是因?yàn)槲以谑褂肐nformix時(shí)發(fā)現(xiàn)網(wǎng)上對(duì)于Informix的用戶權(quán)限設(shè)置缺少詳實(shí)的資料。希望這份文檔能對(duì)Informix的應(yīng)用者有所幫助(盡管現(xiàn)在Informix的市場(chǎng)占有率是出奇的低。)

有關(guān)我們的系統(tǒng)

  我們使用的數(shù)據(jù)庫(kù)數(shù)據(jù)服務(wù)器上的操作系統(tǒng)是SCO UNIX 5.05,數(shù)據(jù)庫(kù)選用Informix 7.3。由于選用操作系統(tǒng)和數(shù)據(jù)庫(kù)的不同,以下的操作可能會(huì)用細(xì)微的差別。

創(chuàng)建新用戶

  在我們使用的平臺(tái)上,Informix的數(shù)據(jù)庫(kù)用戶對(duì)應(yīng)于UNIX的系統(tǒng)用戶,因此創(chuàng)建新用戶的過(guò)程也就是創(chuàng)建UNIX系統(tǒng)用戶的過(guò)程,我們可以用root登錄后使用如下命令創(chuàng)建三個(gè)新的用戶:

 


                                                    #useradd mydba
                                                    #useradd myuser1
                                                    #useradd myuser2
                                                    

  然后使用passwd給這三個(gè)用戶設(shè)置相應(yīng)的口令,我們可以看到由于我們的useradd命令沒(méi)有采用完整的格式,因此這三個(gè)用戶并不能真正用來(lái)登錄到我們的UNIX主機(jī),而只能作為數(shù)據(jù)庫(kù)用戶來(lái)使用。

數(shù)據(jù)庫(kù)級(jí)別的用戶權(quán)限

  對(duì)于所有的有權(quán)使用(這里的有權(quán)使用可能意味著該用戶只能瀏覽該數(shù)據(jù)庫(kù)中某一數(shù)據(jù)表的某一字段)該數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)用戶都必須賦予其數(shù)據(jù)庫(kù)級(jí)別的用戶權(quán)限。在Informix中,數(shù)據(jù)庫(kù)級(jí)別的用戶權(quán)限有三種,按權(quán)限的大小依次是connect、resource和DBA。

Connect

  這是級(jí)別最低的一種數(shù)據(jù)庫(kù)級(jí)別的用戶權(quán)限。擁有該權(quán)限的用戶可以執(zhí)行select、insert、update和delete語(yǔ)句,針對(duì)數(shù)據(jù)表執(zhí)行存儲(chǔ)過(guò)程,創(chuàng)建數(shù)據(jù)表的視圖,創(chuàng)建臨時(shí)表(這樣的臨時(shí)表可以有索引,也可以沒(méi)有索引)。

Resource

  擁有該權(quán)限的用戶除擁有connect的全部權(quán)限以外,他還可以創(chuàng)建新的表,并可以對(duì)它自己所創(chuàng)建的表執(zhí)行alter和drop操作,并可以對(duì)這些表創(chuàng)建索引。

DBA

  數(shù)據(jù)庫(kù)的建立者和擁有者被自動(dòng)賦予這種權(quán)限。擁有該權(quán)限的用戶除擁有resource的全部權(quán)限以外,他還可以對(duì)其他用戶賦予或解除connect、resource和DBA權(quán)限,可以對(duì)其它用戶創(chuàng)建的表的視圖執(zhí)行drop和alter操作。甚至他還可以對(duì)數(shù)據(jù)庫(kù)執(zhí)行drop、start、stop和recover操作。

新數(shù)據(jù)庫(kù)的建立并為各用戶賦予相應(yīng)的數(shù)據(jù)庫(kù)級(jí)別的權(quán)限

  使用有權(quán)登錄到UNIX主機(jī)的用戶創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)(create database databasename命令)。如上所述,現(xiàn)在該用戶將對(duì)新創(chuàng)建的databasename數(shù)據(jù)庫(kù)擁有DBA的權(quán)限。連接到這個(gè)庫(kù)后,采用GRANT命令可以對(duì)其它用戶賦予相應(yīng)的數(shù)據(jù)庫(kù)級(jí)別的權(quán)限。(事實(shí)上這是一個(gè)真正意義上的超級(jí)用戶,換言之也是最危險(xiǎn)的用戶,在我們下面賦予了mydba以該表的DBA權(quán)限以后,我們將不再使用這個(gè)用戶)。

  賦予用戶相應(yīng)的數(shù)據(jù)庫(kù)級(jí)別的權(quán)限的格式是:

GRANT 權(quán)限 TO 用戶名[,用戶名]

  于是,我們可以使用下面的三個(gè)命令給我們新創(chuàng)建的用戶賦予相應(yīng)的數(shù)據(jù)庫(kù)級(jí)別的權(quán)限。


                                                    GRANT DBA TO mydba;/*賦予mydba以DBA的權(quán)限*/
                                                    GRANT CONNECT TO myuser1,myuser2;/*賦予myuser1,myuser2以CONNECT的權(quán)限*/
                                                    

  在這里,我們有必要介紹一個(gè)特殊的用戶public,如果使用GRANT ... TO PUBLIC,這將意味著賦予所有用戶某種權(quán)限,當(dāng)然,這種做法也許并不可取。

用戶數(shù)據(jù)庫(kù)級(jí)別權(quán)限的解除

  解除用戶相應(yīng)的數(shù)據(jù)庫(kù)級(jí)別的權(quán)限的格式是:

REVOKE 權(quán)限 FROM 用戶名[,用戶名]

  對(duì)于擁有DBA、RESOURCE權(quán)限的用戶,解除其相應(yīng)的DBA、RESOURCE權(quán)限將自動(dòng)將其降格為CONNECT權(quán)限。

  而對(duì)于只擁有CONNECT權(quán)限的用戶,解除其CONNECT權(quán)限實(shí)際上也就意味著刪除該數(shù)據(jù)庫(kù)用戶。

  示例:


                                                    REVOKE DBA FROM mydba;/*將mydba降格為CONNECT權(quán)限*/
                                                    REVOKE CONNECT FROM myuser1;/*解除myuser1對(duì)該數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限*/
                                                    

表級(jí)別和字段級(jí)別的權(quán)限

  當(dāng)一個(gè)用戶訪問(wèn)數(shù)據(jù)庫(kù)時(shí),DBA可以限制其對(duì)指定表和表中指定字段的訪問(wèn)。任何resource級(jí)別或DBA級(jí)別的用戶都可以創(chuàng)建表。表的擁有者或任何DBA級(jí)別的用戶都可以對(duì)其它用戶賦予或解除針對(duì)該數(shù)據(jù)表的表級(jí)別和字段級(jí)別的權(quán)限。這樣的權(quán)限共有八種:insert、delete、select、update、references、index、alter和all。

Insert

  該權(quán)限表示用戶可以向表中增添新的數(shù)據(jù)。

Delete

  該權(quán)限表示用戶可以刪除表中的數(shù)據(jù)。

Select

  該權(quán)限可以擴(kuò)展到指定字段,表示用戶可以查詢表中的記錄或指定字段。

Update

  該權(quán)限可以擴(kuò)展到指定字段,表示用戶可以修改表中的記錄或指定字段。

References

  該權(quán)限可以擴(kuò)展到指定字段,表示用戶可以針對(duì)表中的記錄或指定字段制定參考性約束條件。參考性約束條件用來(lái)執(zhí)行諸如多級(jí)刪除和字段之間關(guān)聯(lián)的工作。賦予該權(quán)限的用戶應(yīng)該首先至少是resource級(jí)別的用戶。

Index

  該權(quán)限表示用戶可以建立或刪除與表有關(guān)的索引。賦予該權(quán)限的用戶應(yīng)該首先至少是resource級(jí)別的用戶。一個(gè)connect級(jí)別的用戶即使被賦予該權(quán)限也不能建立索引。該權(quán)限不能擴(kuò)展到指定字段,這是因?yàn)樗饕墙⒃诒淼乃行械幕A(chǔ)上的。

Alter

  該權(quán)限表示用戶可以改變表的結(jié)構(gòu)。所謂改變表的結(jié)構(gòu)是指增加、刪除和改變字段或改變字段的數(shù)據(jù)類型。該權(quán)限只能針對(duì)數(shù)據(jù)表。一般來(lái)說(shuō),只有對(duì)于具備數(shù)據(jù)庫(kù)系統(tǒng)知識(shí)并知道如何保護(hù)數(shù)據(jù)庫(kù)系統(tǒng)的人,我們才會(huì)賦予此項(xiàng)權(quán)限。

All

  該權(quán)限包含上面的所有七種權(quán)限。

創(chuàng)建新表

  使用mydba登錄到數(shù)據(jù)庫(kù),并使用如下語(yǔ)句創(chuàng)建一個(gè)新的數(shù)據(jù)表:


                                                    CREATE TABLE customer_table (
                                                    customer_id char(2) not null,
                                                    balance decimal(16, 2) not null,
                                                    primary key(customer_id));
                                                    

  在創(chuàng)建新表后,系統(tǒng)將對(duì)public賦予該表All的權(quán)限。也就是說(shuō)所有可以訪問(wèn)該數(shù)據(jù)庫(kù)的用戶都可以對(duì)該表執(zhí)行select、insert、update和delete語(yǔ)句,這顯然不是我們想要看到的。

用戶表級(jí)別和字段級(jí)別權(quán)限的解除

  解除用戶相應(yīng)的數(shù)據(jù)庫(kù)級(jí)別的權(quán)限的格式是:

REVOKE 權(quán)限[,權(quán)限] [(字段名[,字段名])] ON 表名 FROM 用戶名[,用戶名]

  我們首先需要解除public在該表上的All權(quán)限:

REVOKE ALL ON customer_table FROM PUBLIC;

  其它示例:


                                                    REVOKE INSERT ON customer_table FROM PUBLIC;/*解除所有用戶對(duì)該表的INSERT權(quán)限*/
                                                    REVOKE SELECT ON customer_table FROM myuser1;/*解除myuser1對(duì)該表的SELECT權(quán)限*/
                                                    REVOKE UPDATE (customer_id, balance)
                                                    ON customer_table FROM myuser1;
/*解除myuser1對(duì)該表中customer_id, balance字段的UPDATE權(quán)限*/

用戶表級(jí)別和字段級(jí)別權(quán)限的賦予

  賦予用戶相應(yīng)的數(shù)據(jù)庫(kù)級(jí)別的權(quán)限的格式是:

GRANT 權(quán)限[,權(quán)限] [(字段名[,字段名])] ON 表名 TO 用戶名[,用戶名]

  我們賦予myuser1以更改該表中balance字段的權(quán)限:

GRANT UPDATE (balance) ON customer_table TO myuser1;

  賦予myuser2以瀏覽該表的權(quán)限:

GRANT SELECT ON customer_table TO myuser2;

多種權(quán)限的同時(shí)賦予和解除

  從上面的REVOKE和GRANT的格式,我們可看到,其實(shí)我們可以使用一條命令同時(shí)針對(duì)某一用戶賦予或解除多種表級(jí)別或字段級(jí)別的權(quán)限。例如:

  GRANT INSERT, DELETE, UPDATE ON customer_table TO PUBLIC;/*同時(shí)賦予所有用戶對(duì)該表的INSERT、DELETE和UPDATE權(quán)限*/


                                                    GRANT SELECT, UPDATE (balance)
                                                    ON customer_table TO myuser2;
/*同時(shí)賦予myuser2對(duì)該表中balance字段的SELECT和UPDATE權(quán)限*/ REVOKE INDEX, ALTER ON customer_table FROM myuser1;
/*同時(shí)解除myuser1對(duì)該表的INDEX和ALTER權(quán)限*/

  你也可以在一條語(yǔ)句中同時(shí)針對(duì)某一用戶賦予或解除表級(jí)別和字段級(jí)別的權(quán)限,這時(shí)字段級(jí)別的權(quán)限使用指定的字段,而表級(jí)別的權(quán)限使用指定的數(shù)據(jù)表。例如:


                                                    GRANT INSERT, DELETE, SELECT, UPDATE (balance) ON customer_table TO myuser2;
                                                    /*同時(shí)賦予myuser2對(duì)該表的INSERT、DELETE權(quán)限以及對(duì)字段balance的SELECT和UPDATE權(quán)限*/
                                                    REVOKE INDEX, SELECT, ALTER (balance) ON customer_table FROM myuser1;
                                                    /*同時(shí)賦予myuser1對(duì)該表的INDEX、ALTER權(quán)限以及對(duì)字段balance的SELECT權(quán)限*/
                                                    

其它關(guān)鍵詞

  在GRANT命令中,還可以使用其它兩個(gè)關(guān)鍵詞,首先是WITH GRANT OPTION關(guān)鍵詞。在GRANT語(yǔ)句中使用這個(gè)關(guān)鍵詞表示相關(guān)用戶可以將同樣的權(quán)限賦予其它用戶。

  在下面的示例中,myuser1不僅對(duì)customer_table具有insert、delete、select和update的權(quán)限,而且他可以將這些權(quán)限中的幾個(gè)或全部賦予其它用戶。

  GRANT INSERT, DELETE, SELECT, UPDATE ON customer_table TO myuser1 WITH GRANT OPTION;

  如果myuser1的權(quán)限中的一個(gè)或全部被解除,所有經(jīng)myuser1授權(quán)的用戶的相關(guān)權(quán)限也自動(dòng)被解除。

  另一個(gè)關(guān)鍵詞是AS關(guān)鍵詞。AS關(guān)鍵詞允許你在執(zhí)行一個(gè)授權(quán)時(shí)就象是在使用其它用戶進(jìn)行授權(quán)。而當(dāng)這個(gè)用戶的權(quán)限中的一個(gè)或全部被解除時(shí),此次授權(quán)的用戶的的相關(guān)權(quán)限也自動(dòng)被解除。

  回到我們上面的例子,myuser1已經(jīng)被賦予了customer_table的insert、delete、select和update權(quán)限,并且可以對(duì)這些權(quán)限進(jìn)行授權(quán)。一個(gè)DBA,數(shù)據(jù)表的擁有者或是給myuser1授權(quán)的用戶可以扮演myuser1給其它用戶授權(quán):

GRANT INSERT, DELETE, SELECT, UPDATE ON customer_table TO myuser2 AS myuser1;

  現(xiàn)在myuser2和myuser1具有了同樣的權(quán)限。要同時(shí)解除兩者的權(quán)限,只要解除myuser1的權(quán)限就行了:

REVOKE ALL ON customer_table FROM myuser1;

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多