Прежде всего я восстановил базу данных с другого сервера, и теперь все хранимые процедуры называются как [azamsharp].[usp_getlatestposts]. Я думаю, что [azamsharp] — это префикс, поскольку это был пользователь на исходном сервере.
Теперь на моей локальной машине это не запускается. Я не хочу префикс [azamsharp] со всеми хранимыми процедурами.
Кроме того, когда я нажимаю правой кнопкой мыши на Sproc, я даже не вижу опцию свойств. Я запускаю SQL SERVER 2005 на Windows 7.
ОБНОВЛЯТЬ:
Странно то, что если я захожу в производственную базу данных со своей машины, я вижу опцию свойств. Так что, действительно что-то не так с безопасностью Windows 7.
ОБНОВЛЕНИЕ 2:
Когда я запустил хранимую процедуру orphan users, она показала двух пользователей "azamsharp" и "dbo1". Я исправил пользователя "azamsharp", но "dbo1" не исправляется. Когда я запускаю следующий скрипт:
exec sp_change_users_login 'update_one', 'dbo1', 'dbo1' Я получаю следующую ошибку:
Сообщение 15291, уровень 16, состояние 1, процедура sp_change_users_login, строка 131 Завершение процедуры. Имя входа 'dbo1' отсутствует или недействительно.
решение1
У вас, вероятно, есть пользователи-сироты. Когда вы получаете доступ к серверу со своего компьютера, ваши учетные данные домена, вероятно, имеют доступ как DBadmin к производственному серверу. Запустите этот код, чтобы обнаружить пользователей-сирот:
Use TestDB
sp_change_users_login 'report'
В выводе перечислены все логины, записи которых в системной таблице sysusers базы данных TestDB и системной таблице sysxlogins в главной базе данных не совпадают. Чтобы устранить проблему:
Устранение неполадок у пользователей-сирот
Use TestDB
sp_change_users_login 'update_one', 'test', 'test'
SELECT sid FROM dbo.sysusers WHERE name = 'test'
0x40FF09E48FBD3354B7833706FD2C61E4
use master
SELECT sid FROM dbo.sysxlogins WHERE name = 'test'
0x40FF09E48FBD3354B7833706FD2C61E4
Это повторно связывает логин сервера "test" с пользователем базы данных TestDB "test". Хранимая процедура sp_change_users_login также может выполнять обновление всех потерянных пользователей с параметром "auto_fix", но это не рекомендуется, поскольку SQL Server пытается сопоставить логины и пользователей по имени. В большинстве случаев это работает; однако, если с пользователем связан неправильный логин, у пользователя могут быть неправильные разрешения.