Я только что мигрировал от SQL2000 до SQL2008, и я начал получать выполнить проблему разрешения о сохраненном proc, который использует sp_OACreate.
Остальная часть системы хорошо работает с входом в систему дб, который был установкой и добавил к базе данных.
Я попробовал:
USE master
GO
GRANT EXEC ON sp_OACreate TO [dbuser]
GO
Но это перестало работать со следующей ошибкой:
Сообщение 15151, Уровень 16, состояние 1, Строка 1 не Могут показать пользователя 'dbuser', потому что это не существует, или у Вас нет разрешения.
Я зарегистрирован в сервер как sa с полными полномочиями. Я могу выполнить подобный sql оператор и применить полномочия к роли сервера, однако не вход в систему/пользователь.
Как я применяю изменения в определенном пользователе/входе в систему?
Я могу применить полномочия к общедоступной роли, и она решает мой вопрос; однако это, кажется, проблема безопасности мне, который я действительно не хочу обращаться к живому серверу.
В продолжение ответа Джона я проверил списки пользователей в базе данных 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" не существует в главной базе данных.
Я предполагаю, что пользователь существует в главной базе данных?
Вы можете проверить, используя следующий T-SQL
USE MASTER;
GO
SELECT *
FROM sys.sysusers
WHERE name = 'dbuser'
Если окажется, что пользователя не существует, просто используйте оператор CREATE USER и создайте пользователя под именем "dbuser". Пользователь будет автоматически сопоставлен с одноименным логином, если таковой существует.
Проверьте, есть ли у вашего пользователя разрешения на используемую базу данных. Вы можете сделать это, Безопасность -> Логины -> Выберите пользователя
и откройте окно свойств. Затем выберите "User Mapping"
из правого меню. Теперь отметьте базы данных, к которым вы хотите, чтобы данный пользователь имел доступ. После этого выберите в нижней части окна "Database role membership" и отметьте "db_owner"
. Теперь пользователь будет владельцем базы данных и сможет выполнять запросы, процедуры хранения и т.д.
UPDATE:
Добавьте пользователя для базы данных, выбрав вашу базу данных -> безопасность -> пользователи -> правый клик "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
Ваша проблема может быть связана с осиротевшими пользователями.
Попробуйте
USE MASTER
GO
EXEC sp_change_users_login 'Report'
Это вернет одну строку для каждого потерянного имени пользователя. Затем,
EXEC sp_change_users_login 'Update_One', 'dbuser', 'dbuser'