2010-02-05 44 views
1

我有一種情況,我想限制每個用戶登錄的數據庫視圖。SQL Server - 基於登錄限制數據庫視圖

例如: 我有3個數據庫在我的SQL Server實例中調用MyDB,UserDB,RestrictedDB。 然後我創建了2個登錄名;用戶1和用戶2。 然後我做了一個DENY VIEW ANY DATABASE TO [User1],然後DENY查看任何數據庫到[User2]。 然後我通過執行sp_changedbowner'User1'使UserDB的所有者User1'

當我以User1身份登錄時,我只能看到UserDB,這正是我想要的。但當然,當我以User2身份登錄時,沒有他可以查看的數據庫。

我通過執行sp_addrolemember'db_owner','User2'並重新登錄,但我仍然無法看到UserDB,並將User2作爲db_owner。我沒有試圖在User2上執行sp_changedbowner,因爲我認爲結果是User2將能夠看到UserDB而不是User1。

我需要的是User1 & User2只能看到UserDB。我會如何去做這件事?

在此先感謝!

回答

0

在Oracle中,這是通過'GRANT'命令完成的。我不知道是SQL Server有GRANT用於

GRANT:

GRANT [permissions] ON TABLE to [user] 

所以

GRANT select, insert, update, delete ON TABLE to User2 
1

的登錄需要通過建立數據庫用戶映射到登錄與數據庫相關聯。

0

在SQL Server中,有服務器登錄數據庫用戶。試圖通過相關的服務器登錄到特定的數據庫:

數據庫>安全>用戶>新用戶...

3

你可以設置一個安全角色對錶,視圖,以及它們的訪問授權privleges這一切。將期望的用戶與您創建的角色關聯起來,您將得到想要的結果。

以下應該創建一個角色,登錄名,用戶並向所討論的視圖提供SELECT only權限。相同的方法可以適用於任何你想要的權限。

CREATE ROLE [db_views_role] AUTHORIZATION [dbo] 
GO 
GRANT SELECT ON [dbo].[vMyView] TO [db_views_role] 
GO 
CREATE LOGIN [my_login] WITH PASSWORD=N'PASSWORD', DEFAULT_DATABASE=[MyDatabase], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
GO 
CREATE USER [my_login] FOR LOGIN [my_login] 
GO 
EXEC sp_addrolemember N'db_views_role', N'my_login' 
GO