Пользователи не могут просматривать таблицы в нестандартной схеме в SSMS

10

У меня проблема с настройкой VIEW DEFINITIONразрешения на уровне схемы для одного из моих пользователей. Я создал схему TestSchemaи добавил несколько таблиц. Пользователь в настоящее время имеет право устанавливать для доступа и изменение таблицы ( SELECT, UPDATE, DELETE, и т.д.) через dbo_datareaderи dbo_datawriterроли. Однако они не могут видеть ни одну из таблиц в проводнике объектов SSMS.

Я пытался предоставить разрешения для просмотра определений:

grant view definition on SCHEMA :: [TestSchema] to [User]

Это не сработало. Я попытался установить разрешение на уровне таблицы:

grant view definition on [TestSchema].[NewTable] to [User]

Это тоже не сработало. Тогда я попробовал просто грант грант:

grant view definition to [User]

И это сработало; теперь они могут видеть TestSchema, как и другие схемы, к которым у них не должно быть доступа.

Моя цель здесь - позволить пользователю просматривать все таблицы в данной схеме. Как мне это сделать? Если я должен быть в состоянии сделать это по умолчанию, какие разрешения я должен искать на то, чтобы найти , почему я не могу?

eykanal
источник
На моем экземпляре 2008R2, когда я предоставляю db_datareader или db_datawriter, они могут видеть все схемы. Я понимаю, что это не то, что вы ищете, но это означает, что есть существенная разница между вашей настройкой и моей, поэтому я не могу проверить это. Версия отличается, или какая-то другая безопасность была изменена?
cfradenburg
@cfradenburg - сложно сказать; это сервер, управляемый ИТ, поэтому я не уверен, что они сделали, и я новичок в SQL Server, поэтому я не знаю, что искать. Я думаю, что часть моего вопроса, какие другие разрешения / роли / ??? я должен искать, чтобы определить, может ли это быть просто исправлено разрешениями?
эйканал
Может ли пользователь запрашивать таблицы? Если они могут сделать запрос, то это может быть просто проблемой в SSMS.
user9164
@ user9164 Да, пользователи могут запрашивать таблицы; это просто вопрос их просмотра в SSMS.
эйканал

Ответы:

11

Краткий ответ: не используйте db_datareaderили db_datawriterили их отрицание эквивалентов. Они только для обратной совместимости. Их использование вызовет проблемы, подобные той, с которой вы столкнулись.

Если вы хотите дать основной Алисе разрешения SELECT, INSERT, UPDATE и DELETE для всех табличных объектов в схеме Sales, используйте следующее.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

Если вы хотите дать основной Алисе разрешения SELECT, INSERT, UPDATE и DELETE для всех табличных объектов во всех схемах, используйте следующее.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

Видимость метаданных будет работать правильно.

Гринстоун Уолкер
источник
Есть ли у вас источник для бита «обратной совместимости»? Я понимаю, что схемы устарели, но я ничего не могу найти в ролях.
Стейн
0

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

Используйте что-то подобное для уровня сервера:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

И что-то подобное на уровне базы данных

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO
Ник винстанли
источник
Спасибо за комментарий, я попробую это, когда вернусь к работе в понедельник.
эйканал
0

Это произошло со мной, когда я обновил наш SQL Server с 2008R2 до 2014 года. Db_datareader или db_datawriter или их отрицательные эквиваленты прекрасно работают в 2008R2, но они не работают в 2014 году.

Пример предоставления разрешения в SQL Server 2014

Если вы хотите дать пользователю Алиса права SELECT, INSERT, UPDATE и DELETE для всех табличных объектов в схеме Sales, используйте следующее.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: Продажи Алисе; Если вы хотите дать основной Алисе разрешения SELECT, INSERT, UPDATE и DELETE для всех табличных объектов во всех схемах, используйте следующее.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice; Видимость метаданных будет работать правильно.

Ссылка [Гринстоун Уолкер].

Sundeep
источник
1
Sundeep, пожалуйста, попробуйте объяснить ответ, а не просто предоставить ссылку. Если вам нужна помощь, ознакомьтесь с экскурсией
LowlyDBA