SQL語言用GRANT語句向用戶授予操作權(quán)限,GRANT語句的一般格式為:
連平網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。成都創(chuàng)新互聯(lián)從2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
GRANT 權(quán)限[,權(quán)限]...
[ON 對象類型 對象名]
TO 用戶[,用戶]...
[WITH GRANT OPTION];
其語義為:將對指定操作對象的指定操作權(quán)限授予指定的用戶。
不同類型的操作對象有不同的操作權(quán)限,常見的操作權(quán)限如表3-4所示。
表3-4 不同對象類型允許的操作權(quán)限
對象 對象類型 操作權(quán)限
屬性列 TABLE SELECT, INSERT, UPDATE, DELETE ALL PRIVIEGES
視圖 TABLE SELECT, INSERT, UPDATE, DELETE ALL PRIVIEGES
基本表 TABLE SELECT, INSERT, UPDATE, ALTER, INDEX,DELETE ALL PRIVIEGES
數(shù)據(jù)庫 DATABASE CREATETAB
詳細(xì)信息…
接受權(quán)限的用戶可以是一個或多個具體用戶,也可以是PUBLIC即全體用戶。
如果指定了WITH GRANT OPTION子句,則獲得某種權(quán)限的用戶還可以把這種權(quán)限再授予別的用戶。如果沒有指定WITH GRANT OPTION子句,則獲得某種權(quán)限的用戶只能使用該權(quán)限,但不能傳播該權(quán)限。
例1
把查詢Student表權(quán)限授給用戶U1
GRANT SELECT ON TABLE Student TO U1;
例2
把對Student表和Course表的全部權(quán)限授予用戶U2和U3
GRANT ALL PRIVILIGES ON TABLE Student, Course TO U2, U3;
例3
把對表SC的查詢權(quán)限授予所有用戶
GRANT SELECT ON TABLE SC TO PUBLIC;
例4
把查詢Student表和修改學(xué)生學(xué)號的權(quán)限授給用戶U4
詳細(xì)信息…
這里實際上要授予U4用戶的是對基本表Student的SELECT權(quán)限和對屬性列Sno的UPDATE權(quán)限。授予關(guān)于屬性列的權(quán)限時必須明確指出相應(yīng)屬性列名。完成本授權(quán)操作的SQL語句為:
GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;
例5
把對表SC的INSERT權(quán)限授予U5用戶,并允許他再將此權(quán)限授予其他用戶
GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION;
詳細(xì)信息…
執(zhí)行此SQL語句后,U5不僅擁有了對表SC的INSERT權(quán)限,還可以傳播此權(quán)限,即由U5用戶發(fā)上述GRANT命令給其他用戶。
例如U5可以將此權(quán)限授予U6:
GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION;
同樣,U6還可以將此權(quán)限授予U7:
GRANT INSERT ON TABLE SC TO U7;
因為U6未給U7傳播的權(quán)限,因此U7不能再傳播此權(quán)限。
例6
DBA把在數(shù)據(jù)庫S_C中建立表的權(quán)限授予用戶U8
GRANT CREATETAB ON DATABASE S_C TO U8;
sql語言用grant語句向用戶授予操作權(quán)限,grant語句的一般格式為:
grant
權(quán)限[,權(quán)限]...
[on
對象類型
對象名]
to
用戶[,用戶]...
[with
grant
option];
其語義為:將對指定操作對象的指定操作權(quán)限授予指定的用戶。
不同類型的操作對象有不同的操作權(quán)限,常見的操作權(quán)限如表3-4所示。
表3-4
不同對象類型允許的操作權(quán)限
對象
對象類型
操作權(quán)限
屬性列
table
select,
insert,
update,
delete
all
privieges
視圖
table
select,
insert,
update,
delete
all
privieges
基本表
table
select,
insert,
update,
alter,
index,delete
all
privieges
數(shù)據(jù)庫
database
createtab
詳細(xì)信息…
接受權(quán)限的用戶可以是一個或多個具體用戶,也可以是public即全體用戶。
如果指定了with
grant
option子句,則獲得某種權(quán)限的用戶還可以把這種權(quán)限再授予別的用戶。如果沒有指定with
grant
option子句,則獲得某種權(quán)限的用戶只能使用該權(quán)限,但不能傳播該權(quán)限。
例1
把查詢student表權(quán)限授給用戶u1
grant
select
on
table
student
to
u1;
例2
把對student表和course表的全部權(quán)限授予用戶u2和u3
grant
all
priviliges
on
table
student,
course
to
u2,
u3;
例3
把對表sc的查詢權(quán)限授予所有用戶
grant
select
on
table
sc
to
public;
例4
把查詢student表和修改學(xué)生學(xué)號的權(quán)限授給用戶u4
詳細(xì)信息…
這里實際上要授予u4用戶的是對基本表student的select權(quán)限和對屬性列sno的update權(quán)限。授予關(guān)于屬性列的權(quán)限時必須明確指出相應(yīng)屬性列名。完成本授權(quán)操作的sql語句為:
grant
update(sno),
select
on
table
student
to
u4;
例5
把對表sc的insert權(quán)限授予u5用戶,并允許他再將此權(quán)限授予其他用戶
grant
insert
on
table
sc
to
u5
with
grant
option;
詳細(xì)信息…
執(zhí)行此sql語句后,u5不僅擁有了對表sc的insert權(quán)限,還可以傳播此權(quán)限,即由u5用戶發(fā)上述grant命令給其他用戶。
例如u5可以將此權(quán)限授予u6:
grant
insert
on
table
sc
to
u6
with
grant
option;
同樣,u6還可以將此權(quán)限授予u7:
grant
insert
on
table
sc
to
u7;
因為u6未給u7傳播的權(quán)限,因此u7不能再傳播此權(quán)限。
例6
dba把在數(shù)據(jù)庫s_c中建立表的權(quán)限授予用戶u8
grant
createtab
on
database
s_c
to
u8;
先賦予所有的列權(quán)限,再使用deny排除列或者revoke取消列就可以了
用SQL語句為指定用戶授權(quán)的具體步驟如下:
我們需要準(zhǔn)備的材料分別是:電腦、sqlserver2008
1、首先打開sqlserver2008,之后點擊打開左上角的“新建查詢”。
2、然后在彈出來的窗口中新建aa用戶,輸入:
exec sp_addlogin ?'aa', ? ?'123456', ? ?'mydb'
exec ?sp_grantdbaccess ?'aa'
EXEC sp_addrolemember 'db_datareader', 'aa',讓aa用戶獲得設(shè)置查詢mydb所有表的權(quán)限。
3、然后用aa賬號登錄到該系統(tǒng)中即可。
AWS推出了與SQL兼容的查詢語言PartiQL,只要數(shù)據(jù)庫查詢引擎提供PartiQL支持,使用者就能以PartiQL單一查詢關(guān)聯(lián)式數(shù)據(jù)庫的結(jié)構(gòu)化資料,以及開放資料格式中的巢狀資料或是半結(jié)構(gòu)化資料,甚至還能用來查詢NoSQL或是文件數(shù)據(jù)庫中無固定結(jié)構(gòu)(Schema-less)的資料。除了AWS自家的數(shù)據(jù)庫服務(wù),NoSQL數(shù)據(jù)庫Couchbase Server也承諾將會支持PartiQL。
企業(yè)資料分散在關(guān)聯(lián)式數(shù)據(jù)庫、非關(guān)聯(lián)式數(shù)據(jù)庫以及資料湖泊中。高度結(jié)構(gòu)化的資料,儲存在SQL數(shù)據(jù)庫或是資料倉儲;無固定結(jié)構(gòu)的資料則由鍵值儲存、圖形數(shù)據(jù)庫(Graph Database)、分類帳數(shù)據(jù)庫或是時間序列數(shù)據(jù)庫等NoSQL數(shù)據(jù)庫處理;而在資料湖泊中的資料,可能也有部分缺乏結(jié)構(gòu),或是可能為巢狀或是多值結(jié)構(gòu)。不同的資料類型適用于不同的使用案例,而每種類型的資料,可能都有自己的查詢語言。
不同的資料儲存對應(yīng)不同的查詢語言,當(dāng)企業(yè)更換資料格式或是數(shù)據(jù)庫引擎時,可能還需要跟著改變應(yīng)用程式和查詢語法,AWS提到,這對于資料的應(yīng)用,特別是使用資料湖泊的靈活性與效率,有著很大的阻礙。為了統(tǒng)一不同類型數(shù)據(jù)庫存取方法,AWS發(fā)布了查詢語言PartiQL,這是個與SQL兼容的查詢語言,可以用來查詢以各種格式儲存在各地的資料。
用戶可以使用PartiQL來查詢關(guān)聯(lián)式數(shù)據(jù)庫,像是在Redshift實作交易或是資料分析等應(yīng)用,或?qū)τ贏mazon S3資料湖泊的開放資料格式,同樣能使用PartiQL對巢狀資料與半結(jié)構(gòu)化資料例如Amazon Ion格式進(jìn)行查詢,另外,PartiQL也可用于文件數(shù)據(jù)庫等NoSQL數(shù)據(jù)庫,查詢無固定結(jié)構(gòu)的資料。
AWS表示,PartiQL的出現(xiàn),是為了滿足自家查詢和轉(zhuǎn)換大量資料的需求,其提供嚴(yán)格的SQL兼容性,可與標(biāo)準(zhǔn)SQL混合使用,執(zhí)行連接(Join)、過濾(Filtering)與聚合(Aggregation)操作,并以最小擴充支持巢狀和半結(jié)構(gòu)化資料,讓開發(fā)者以簡單且一致的方法,不需要更改查詢語言,就能查詢各種格式和服務(wù)的資料。
PartiQL具格式獨立性與儲存獨立性,PartiQL語法和語義不依賴任何資料格式,無論使用者是要查詢JSON、Parquet、ORC、CSV還是Ion等格式,查詢語句的寫法都相同,PartiQL的查詢在綜合邏輯類型系統(tǒng)上運作,才對應(yīng)到不同底層的格式。而PartiQL也不相依于特定資料儲存,因此適用于不同的底層資料儲存。
雖然過去針對跨不同類型數(shù)據(jù)庫查詢的問題,已有不少解決方案,AWS指出,像是Postgres JSON同樣也兼容于SQL,但是卻無法良好地處理JSON巢狀資料;而半結(jié)構(gòu)化查詢語言,雖然能良好處理巢狀資料,但卻無法與SQL語言兼容。AWS提到,PartiQL是第一個能夠完全解決這些問題的查詢語言。
目前AWS已在自家多項服務(wù)支持PartiQL,包括Amazon S3 Select、Amazon Glacier Select、Amazon Redshift Spectrum、Amazon QLDB,接下來幾個月將會有更多的AWS服務(wù)支持PartiQL,Couchbase也公布將加入支持PartiQL的行列。現(xiàn)在PartiQL以Apache2.0授權(quán)許可開源,公開教學(xué)、規(guī)范以及參考實作,所有社群都能使用并參與貢獻(xiàn)。