Sql-Server-2008
在遠端數據庫上執行儲存過程
我在同一台伺服器上有 2 個數據庫。DB-A 和 DB-B。DB-B 有一個對數據庫 B 具有讀寫訪問權限的使用者。我想授予 DB-B 中的使用者對數據庫 A 中的 2 個儲存過程的執行權限。當數據庫位於單獨的伺服器上時,我能夠做到這一點通過設置連結伺服器並映射連結登錄。當數據庫在同一台伺服器上時,我遇到了麻煩。有人可以告訴我如何完成這項任務。
謝謝,詹姆斯
您不需要創建連結登錄或類似的東西。對於本地數據庫,您只需將使用者從登錄名添加到 DB_A,然後將 exec 授予這兩個過程。第一的:
CREATE DATABASE DB_A; GO CREATE DATABASE DB_B; GO -- create a login: CREATE LOGIN DBB_Owner WITH PASSWORD = 'foo', DEFAULT_DATABASE = DB_B, CHECK_POLICY = OFF; GO -- make DBB_Owner the DB_B owner: -- step is not necessary, just trying to match your scenario ALTER AUTHORIZATION ON DATABASE::DB_B TO DBB_Owner; GO USE DB_A; GO -- create a local user from the server login: CREATE USER DBB_Owner FROM LOGIN DBB_Owner; GO
現在創建三個程序。對於前兩個,給 DBB_Owner 明確的 exec 權限,並且不允許他們對第三個有任何權限。
CREATE PROCEDURE dbo.Proc1 AS SELECT 'Yes! - from Proc1'; GO CREATE PROCEDURE dbo.Proc2 AS SELECT 'Yes! - from Proc2'; GO CREATE PROCEDURE dbo.Proc3 AS SELECT 'No! - from Proc3'; GO GRANT EXECUTE ON dbo.Proc1 TO DBB_Owner; GRANT EXECUTE ON dbo.Proc2 TO DBB_Owner;
DBB_Owner
現在使用密碼連接伺服器foo
,並嘗試執行三個過程:EXEC DB_A.dbo.Proc1; EXEC DB_A.dbo.Proc2; EXEC DB_A.dbo.Proc3; --or USE DB_A; EXEC dbo.Proc1; EXEC dbo.Proc2; EXEC dbo.Proc3;
結果:
Yes! - from Proc1 Yes! - from Proc2 Msg 229, Level 14, State 5, Procedure Proc3, Line 1 The EXECUTE permission was denied on the object 'Proc3', database 'DB_A', schema 'dbo'.