SQL Server - ограничение просмотра баз данных на основе входа в систему

У меня есть ситуация, когда я хочу ограничить просмотр базы данных для входа пользователя.

Например: у меня есть 3 базы данных в моем экземпляре SQL Server с именами MyDB, UserDB, RestrictedDB. Затем я создаю 2 логина; Пользователь1 и Пользователь2. Затем я запретил просмотр любой базы данных [User1], а затем запретил просмотр любой базы данных [User2]. Затем я сделал User1 владельцем UserDB, выполнив sp_changedbowner 'User1'

Когда я вхожу в систему как User1, я вижу только UserDB, что мне и нужно. Но, конечно, когда я вхожу в систему как User2, нет базы данных, которую он может просматривать.

Я также сделал User2 db_owner, выполнив sp_addrolemember 'db_owner', 'User2', и снова вошел в систему, но я все еще не вижу UserDB. Я не пытался выполнить sp_changedbowner для пользователя 2, так как думаю, что в результате пользователь 2 сможет видеть базу данных пользователя, но не пользователя 1.

Мне нужно, чтобы и User1, и User2 могли видеть только UserDB. Как мне это сделать?

Заранее спасибо!


person Jaime    schedule 05.02.2010    source источник


Ответы (4)


Вы можете настроить роль безопасности, предоставляющую привилегии для таблиц, представлений и их доступа ко всему этому. Свяжите желаемого пользователя с созданной вами ролью, и вы получите желаемый результат.

Следующее должно создать роль, логин, пользователя и предоставить разрешение SELECT только для рассматриваемого представления. Те же методы можно применять для любых разрешений, которые вы хотите.

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
person Matt    schedule 05.02.2010

Логины должны быть связаны с базами данных путем создания сопоставления пользователей базы данных с логинами.

person devio    schedule 05.02.2010

В SQL Server существуют логины сервера и пользователи базы данных. Попробуйте связать логин сервера с конкретной базой данных:

База данных > Безопасность > Пользователи > Новый пользователь...

person jinsungy    schedule 05.02.2010

В Oracle это делается с помощью команды GRANT. Я не знаю, есть ли у SQL Server GRANT

ГРАНТ используется:

GRANT [permissions] ON TABLE to [user]

so

GRANT select, insert, update, delete ON TABLE to User2
person David Oneill    schedule 05.02.2010