2014-05-08 123 views
0

我有兩個數據庫。如何在sql server 2008中授予登錄權限?

數據庫:

1. DB1 
2. DB2 

我已經創建了兩個新的登錄。

登錄:

1. DB1_login 
2. DB2_login 

接下來,我爲映射到上述登錄的每個數據庫中創建用戶。

create user DB1_login1_user1 for login DB1_login; 
create user DB2_login2_user2 for login DB2_login; 

所以,DB1數據庫的DB1_login1_user1用戶將被映射到DB1_login1登錄和DB2數據庫的DB2_login2_user2用戶將被映射到DB2_login2登錄。

授予數據庫角色的權限爲用戶是的db_datareaderdb_datawriter權限。我有一個表dbo.sample_table

我的要求:

讓我們考慮,我已登錄的DB1_login1。

在此登錄中,我已將DB1_login1_user1用戶的權限授予DB1數據庫。

現在來自DB1,我必須在DB2上選擇一個表dbo.sample_table,該表被映射到另一個登錄DB2_login2。

下面是查詢我想要做的是。

--CURRENTLY LOGGED IN AS DB1_LOGIN1 
USE DB1; 
EXECUTE as login='DB2_login2' 
select * from DB2.dbo.sample_table 
GO 

我試圖GRANT IMPERSONATE上登錄:: DB2_login2到DB1_login1,但它沒有工作,也,我不知道有關跨登錄授予權限。我認爲授予權限很重要,我需要幫助。

如何成功執行上述查詢?

任何幫助將是可觀的。

回答

1

您創建的用戶僅存在於其各自的數據庫中,因此您嘗試執行的操作是不可能的。即使是這樣,或者您允許在兩個數據庫中使用acces(創建用戶登錄)並給予權限並啓用跨數據庫訪問權限,但安全風險太大。

我建議使用存儲過程來訪問數據跨數據庫。存儲過程應使用證書進行簽名,並在兩個數據庫中創建相同的證書。我已經在各種場合實施了它,它的工作完美無瑕。

這是由Erland Sommarskog here的一個很好的例子。

0

我確實授予登錄權限。

從管理員登錄「Sa」,我執行了下面的查詢。

GRANT IMPERSONATE ON LOGIN::DB2_login to DB1_login; 

然後再從DB1_login,執行下面的查詢跨登錄訪問數據庫。

USE MASTER; 
EXECUTE as login='DB2_login'; 
SELECT * FROM DB2.dbo.sample_table; 
REVERT; 
GO 

最後針對我的情況,我已經解決了這個問題。