SQL-сервер выполняет разрешение; отказ применить полномочия

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

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

Я попробовал:

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

Но это перестало работать со следующей ошибкой:

Сообщение 15151, Уровень 16, состояние 1, Строка 1 не Могут показать пользователя 'dbuser', потому что это не существует, или у Вас нет разрешения.

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

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

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

6
задан WestDiscGolf 15 June 2010 в 08:48
поделиться

4 ответа

В продолжение ответа Джона я проверил списки пользователей в базе данных 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

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

5
ответ дан 8 December 2019 в 15:59
поделиться

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

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

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

USE MASTER;
GO

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

Если окажется, что пользователя не существует, просто используйте оператор CREATE USER и создайте пользователя под именем "dbuser". Пользователь будет автоматически сопоставлен с одноименным логином, если таковой существует.

5
ответ дан 8 December 2019 в 15:59
поделиться

Проверьте, есть ли у вашего пользователя разрешения на используемую базу данных. Вы можете сделать это, Безопасность -> Логины -> Выберите пользователя и откройте окно свойств. Затем выберите "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

1
ответ дан 8 December 2019 в 15:59
поделиться

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

Попробуйте

USE MASTER
GO
EXEC sp_change_users_login 'Report'

Это вернет одну строку для каждого потерянного имени пользователя. Затем,

EXEC sp_change_users_login 'Update_One', 'dbuser', 'dbuser'
2
ответ дан 8 December 2019 в 15:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: