2016-04-16 4 views
3

Я хочу проверить, имеет ли зарегистрированный пользователь на моем SQL-сервере разрешения для создания баз данных.Проверьте, есть ли у пользователя разрешения CREATE DATABASE

Я попытался следующие утверждения:

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE')

SELECT HAS_PERMS_BY_NAME(null, 'DATABASE', 'CREATE')

SELECT HAS_PERMS_BY_NAME(null, null, 'CREATE DATABASE')

Но каждый из них возвращает NULL вместо 1, хотя я действительно есть права на создание новые базы данных.

Я предполагаю, что он должен вернуть 1, запустив SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');, который возвращает 1 :)

Что мне не хватает?

ответ

1

Возможно, у меня есть только found it.

SELECT IS_SRVROLEMEMBER ('dbcreator')

+0

Я не думаю, что это сработает. В частности, это проверяет только тот способ предоставления разрешения на создание баз данных. –

+0

@BenThul Вы уверены в этом? Поскольку в документации указано «Указывает, является ли вход в SQL Server членом указанной роли сервера». И в этой роли есть разрешения CREATE DATABASE. – SeToY

+0

Справа. Но что делать, если я дам создать базу данных для someLogin'? –

1

На моей тестовой системе, я могу запустить это успешно:

SELECT has_perms_by_name(null, null, 'CREATE ANY DATABASE'); 

Это разрешение немного отличается от CREATE DATABASE, но может работать для вас.

0
SELECT HAS_PERMS_BY_NAME(NULL, 'DATABASE', 'CREATE DATABASE') 
Смежные вопросы