Я следующий вид определяется в myCustomDatabase:Как предоставить пользователю доступ к представлению, но не к таблице, которую использует вид?
CREATE VIEW myCustomDatabase.dbo.myView AS
SELECT job_id FROM msdb.dbo.sysjobhistory
myCustomDatabase владелец «s является са.
Мой текущий пользователь (так называемый CurrentUser) имеет только db_reader
роль на myCustomDatabase.
гость is on on msdb база данных.
Когда я исполняю взгляд, я получаю следующее сообщение об ошибке:
The SELECT permission was denied on the object 'sysjobhistory', database 'msdb', schema 'dbo'.
Я понимаю, что мой текущий пользователь не имеет никакой роли, определенный в базе данных системы.
Какую роль/разрешение я должен предоставить текущему пользователю, чтобы он мог выполнить представление (которое содержит только один столбец системы), но не дает ему полный доступ к таблице.
Чтобы возобновить следующий вид должен работать при вызове с CurrentUser:
CREATE VIEW myCustomDatabase.dbo.myView AS
SELECT job_id FROM msdb.dbo.sysjobhistory
, но не следующий запрос:
SELECT * FROM msdb.dbo.sysjobhistory
Edit: видимые таблицы в MSDB
Edit2: Моя SQLServer версия 2008
Моя пользовательская база данных не принадлежит * sa * пользователю, если я устанавливаю * sa * в качестве владельца, как вы предлагаете, может ли он нарушить некоторые существующие правила доступа? – Fractaliste
@Fractaliste, я добавил дополнительную информацию к своему сообщению. Это также можно выполнить с помощью сертификатов. Я добавлю дополнительную информацию об этом методе, если вы укажете, какую версию SQL Server вы используете. –
Если обе базы данных находятся в собственности, мне не нужно выполнять 'ALTER AUTHORIZATION ON DATABASE :: myCustomDatabase TO sa;' не так ли? – Fractaliste