Разрешение на выполнение Sql server; не удалось применить разрешения

Я только что мигрировал из SQL2000 в SQL2008, и я начал получать разрешение на выполнение на сохраненном proc, который использует sp_OACreate.

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

Я пробовал:

USE master
GO
GRANT EXEC ON sp_OACreate TO [dbuser]
GO

но это не удается со следующей ошибкой:

Msg 15151, Уровень 16, Состояние 1, Строка 1 Не удается найти пользователя "dbuser", потому что его не существует или вы не иметь разрешение.

Я зарегистрирован на сервере как sa с полными разрешениями. Я могу выполнить аналогичную инструкцию sql и применить разрешения к роли сервера, но не логин/пользователь.

Как применить изменения к конкретному пользователю / логину?

Я могу применить разрешения к публичной роли, и это решает мою проблему; однако это кажется мне проблемой безопасности, которую я действительно не хочу применять к живому серверу.

5 ответов


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

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

USE MASTER
GO

GRANT EXECUTE ON [sys].[sp_OADestroy] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OACreate] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OAMethod] TO [dbuser]
GO
GRANT EXECUTE ON [sys].[sp_OASetProperty] TO [dbuser]
GO

спасибо за всю помощь и советы. Надеюсь, это поможет другим людям в будущем.


ошибка предполагает, что пользователь "dbuser" не существует в базе данных master.

Я предполагаю, что пользователь существует в базе данных Master?

вы можете проверить, используя следующий T-SQL

USE MASTER;
GO

SELECT *
FROM sys.sysusers
WHERE name = 'dbuser'

если пользователь оказывается не существует, просто использовать СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ оператор и создайте пользователя под названием "dbuser". Пользователь будет автоматически сопоставлен с логином с тем же именем, если он существует.


ваша проблема может быть связана с сирых пользователей.

попробовать

USE MASTER
GO
EXEC sp_change_users_login 'Report'

это вернет одну строку на потерянное имя пользователя. Затем:

EXEC sp_change_users_login 'Update_One', 'dbuser', 'dbuser'

вот некоторый код, который я использую, убедитесь, что (текущий пользователь) имеет разрешение EXECUTE на sp_OACreate и т. д.:

use master;
select state_desc,name from
sys.database_permissions a
left join
sys.all_objects b
on a.major_id = b.object_id
where name like 'sp_OA%';

как указано @John Sansom и @WestDiscGolf пользователь должен существовать в базе данных Master и права на выполнение должны быть предоставлены в базе данных Master, следовательно это. Запрос выше будет возвращать записи, если у пользователя есть разрешения на выполнение и пустой набор, если они этого не делают. (Выполнение в базе данных пользователя также будет возвращено пустым набор.)

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


проверьте, имеет ли пользователь разрешения для используемой базы данных. Вы можете сделать это с помощью Security -> Logins -> Select User и откройте окно свойств. Выберите "User Mapping" справа меню. Теперь проверьте базы данных, к которым должен иметь доступ данный пользователь. После этого выберите в нижней части окна "членство в роли базы данных" и проверить "db_owner". Теперь пользователь станет владельцем базы данных и сможет выполнять запросы, хранить процедуры и так далее.

обновление:
Добавлять пользователь для базы данных, выбрав базу данных - > безопасность - > пользователи - > щелкните правой кнопкой мыши "New User"
Или вы можете использовать этот запрос

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2008R2;
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO 

здесь больше деталей http://msdn.microsoft.com/en-us/library/ms173463.aspx