下面的問題涉及到MySQL 44年5月1日用戶授予權限只查看MySQL視圖
比方說,我有不同的用戶我的應用程序中插入記錄的表。我如何給特定的用戶訪問權限以僅查看他/她在該表中的記錄?我想過用他/她的記錄創建VIEW
,但我不知道如何創建只能看到VIEW
的mysql用戶。
那麼,是否有可能創建一個只能訪問單個VIEW
的mysql用戶?這個用戶是否也可以成爲只讀的訪問權限VIEW
?
謝謝!
PS:我所謂的用戶真的是附屬辦公室,想用自己的應用程序訪問他們的記錄。
下面的問題涉及到MySQL 44年5月1日用戶授予權限只查看MySQL視圖
比方說,我有不同的用戶我的應用程序中插入記錄的表。我如何給特定的用戶訪問權限以僅查看他/她在該表中的記錄?我想過用他/她的記錄創建VIEW
,但我不知道如何創建只能看到VIEW
的mysql用戶。
那麼,是否有可能創建一個只能訪問單個VIEW
的mysql用戶?這個用戶是否也可以成爲只讀的訪問權限VIEW
?
謝謝!
PS:我所謂的用戶真的是附屬辦公室,想用自己的應用程序訪問他們的記錄。
GRANT SELECT ON database1.view1 TO 'someuser'@'somehost';
請注意發出創建視圖命令(稱爲視圖定義器)的用戶也對此產生影響。如果定義者!=使用視圖的用戶,則可能會非常混亂。例如,如果定義者僅在基礎表上具有選擇權限,而另一個用戶具有對視圖的更新權限,則嘗試更新視圖將導致權限被拒絕錯誤。 – 2014-01-16 13:51:58
GRANT SELECT ON <database name>.<view name>
TO <user>@<host> IDENTIFIED BY '<password>'
除了
GRANT SELECT ON <database_name>.<view_name>
TO <user>@<host>
IDENTIFIED BY '<password>'
,最好也做
GRANT SHOW VIEW
ON <database_name>.<view_name> TO <user>@<host>
IDENTIFIED BY '<password>'
讓很多SQL的UI工具可以獲得視圖定義並適用於視圖。
我相信最初的問題實際上是詢問如何將行限制爲給定用戶擁有的行。 (爲每個用戶創建一個視圖,然後授予該視圖的想法似乎是一種解決方法。)
您可以通過將user()引用插入到數據表中,然後對其進行過濾來完成此操作。
使用MySQL 5.6。如果你想使視圖只讀我懷疑你做
-- check the current user
select user();
create table t1 (myId int, mydata varchar(200), myName varchar(200));
insert t1 select 1, 'my data yes', user();
insert t1 select 2, 'my data yes2', user();
insert t1 select 3, 'my data no', 'joe';
select * from t1;
create or replace view v1 AS
select * from t1 where myName = user();
select * from v1;
:創建一個觀點,即限制選擇僅由當前用戶所有記錄。然後您應該使用ALGORITHM = TEMPTABLE子句創建視圖。
這將使視圖只讀的美德,它不得不創建一個臨時表。
實現只讀的另一種方法,這取決於您的數據是否粘貼聚合函數。例如,如果您有一個基於表格的視圖並顯示所有列,那麼您可以在選擇區域粘貼一個獨特的視圖。
如果視圖沒有觸發器,則它們是隻讀的。 – Pentium10 2010-06-24 09:27:39
要使視圖可以更新,視圖中的行與基礎表中的行之間必須存在一對一的關係。還有一些其他構造使視圖不可更新。 – Naktibalda 2010-06-24 09:30:59