Я понял это. Размещать это для всех, кто сталкивается с этим.
1) Во-первых, я заметил, что у моего пользователя dbo нет имени для входа в систему. Это можно увидеть, щелкнув правой кнопкой мыши пользователя dbo в папке Security / Users пользователя dbo и выбрав Свойства. В серой области вы должны указать имя пользователя (dbo) и имя входа (sa). Я думаю, что это обычно происходит, когда вы восстанавливаете свою базу данных или что-то (не уверен). В любом случае, если вы не видите логин, просто запустите скрипт в базе данных с проблемой:
sp_changedbowner 'sa'
Это делает dbo владельцем базы данных (или что-то в этом роде). Причина, по которой я это выяснил, заключалась в том, что я пытался сохранить некоторые разрешения, такие как «db_datareader», «db_datawriter», через этот графический интерфейс, но выдает ошибку, в которой говорится, что имя пользователя требуется. Я думаю, что dbo должен был проверить db_owner (мой делает), и я думаю, что в любом случае это превосходит все остальные.
2) Чтобы заставить мой процесс работать, мне нужно было добавить «с исполнителем как владельцем» в конце процесса. Я пробовал это раньше, но думаю, что это не сработало из-за моей первой проблемы # 1. Procs обычно запускается под владельцем proc, но не динамический sql внутри procs. Они запускаются в контексте пользователя, выполняющего процедуру. Для меня это странно, потому что я подумал бы, что мне нужно добавить это в динамический sql (который я пробовал), но это должно быть в самом proc (пойди разберись?)
3) Вероятно, не мешало бы запустить и этот скрипт:
Предоставить выбор в «MyTable» для «MyUser»
для каждой таблицы, используемой в динамическом sql.
Надеюсь, это поможет ...
вот некоторые ссылки на эту же проблему:
http://www.jimmcleod.net/blog/index.php/2007/05/15/sp_executesql-breaks-chain-of-ownership-in-sql-server-2000/
http://kbalertz.com/301299/Security-Context-Dynamic-Statements-Inside-Stored-Procedure.aspx
http://www.mssqltips.com/tipprint.asp?tip=1822