Sql-Server-2008

在遠端數據庫上執行儲存過程

  • April 23, 2012

我在同一台伺服器上有 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'.

引用自:https://dba.stackexchange.com/questions/16929