SQL Server - ограничить представление баз данных на основе входа в систему - PullRequest
1 голос
/ 05 февраля 2010

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

Например: У меня есть 3 базы данных в моем экземпляре SQL Server, которые называются MyDB, UserDB, RestrictedDB. Затем я создаю 2 входа; Пользователь1 и Пользователь2. Затем я сделал DENY VIEW ЛЮБОЙ БАЗЫ ДАННЫХ [User1], а затем DENY VIEW ЛЮБОЙ БАЗЫ ДАННЫХ [User2]. Затем я сделал User1 владельцем UserDB, выполнив sp_changedbowner 'User1'

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 05 февраля 2010

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

Следующее должно создать роль, логин, пользователя и предоставить 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
1 голос
/ 05 февраля 2010

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

0 голосов
/ 05 февраля 2010

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

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

0 голосов
/ 05 февраля 2010

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

GRANT используется:

GRANT [permissions] ON TABLE to [user]

так

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