Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
Команда DROP USER выдает сообщение:
----------------------
Drop failed for User ...
The database principal is set as the execution context of one or more procedures, functions, or event notifications and cannot be dropped. (Microsoft SQL Server, Error: 15136)

Выгрузил скрипт объектов БД (таблицы, триггера, процедуры и функции (скалярные и табличные). Явных ссылок на удаляемого пользователя в них не нашел ...

----------------------
Попытался поменять владельца всех объектов БД на владельца - схему командами типа:
----------------------
exec sp_changeobjectowner 'имя_объекта' , dbo
----------------------
Нашлась процедура, для которой выполнение sp_changeobjectowner приводит к сообщению:
----------------------
Object 'имя_объекта' does not exist or is not a valid object for this operation.
----------------------
Процедура точно существует, но почему она не поддается sp_changeobjectowner? Из особенностей в ней "нашел" только применение формулировки "WITH EXECUTE AS SELF".
А можно каким-то запросом или через приложение - менеджер СУБД найти упоминания пользователя в "теле" и собственных войствах объектов СУБД?
12 янв 10, 15:00    [8171602]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31219
AronovichAB
Нашлась процедура, для которой выполнение sp_changeobjectowner приводит к сообщению:
----------------------
Object 'имя_объекта' does not exist or is not a valid object for this operation.
----------------------
Владелец у неё какой?
Есть ли другие процедуры с таким-же именем?

При вызове sp_changeobjectowner указываете полное имя?
12 янв 10, 15:05    [8171656]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
WITH EXECUTE AS SELF


EXECUTE AS SELF is equivalent to EXECUTE AS user_name, where the specified user is the person creating or altering the module. The actual user ID of the person creating or modifying the modules is stored in the execute_as_principal_id column in the sys.sql_modules or sys.service_queues catalog view.

И какой там USER ID. Не тот, которого Вы планируете удалить?
12 янв 10, 15:11    [8171719]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
alexeyvg,
ваше предположение по поводу именования объектов было верным. Вероятно мой объект оказался одноименным с каким-то собственным объектом БД. Учел имя схемы и команда
exec sp_changeobjectowner
сработала для всех объектов нужных мне схем.

Однако удалению пользователя это не помогло.
12 янв 10, 15:19    [8171797]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
pkarklin,

В свойствах процедуры, отображаемых менеджером, указано:

connect as sa
execute as dbo

где и что еще надо смотреть - я пока не знаю.
12 янв 10, 15:24    [8171831]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31219
AronovichAB
alexeyvg,
ваше предположение по поводу именования объектов было верным. Вероятно мой объект оказался одноименным с каким-то собственным объектом БД. Учел имя схемы и команда
exec sp_changeobjectowner
сработала для всех объектов нужных мне схем.

Однако удалению пользователя это не помогло.
А теперь какую ошибку пишет?

И насчёт
pkarklin
И какой там USER ID. Не тот, которого Вы планируете удалить?
тоже посмотрите.
12 янв 10, 15:25    [8171840]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
AronovichAB

В свойствах процедуры, отображаемых менеджером, указано:

connect as sa
execute as dbo


Эээ... Это что за свойства и что за менеджер?
12 янв 10, 15:31    [8171904]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
alexeyvg,

сообщение при удалении прежнее:

The database principal is set as the execution context of one or more procedures, functions, or event notifications and cannot be dropped. (Microsoft SQL Server, Error: 15136)
12 янв 10, 15:39    [8171981]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
pkarklin,

Менеджер следующий:

Microsoft SQL Server Management Studio 9.00.4035.00

Свойства - то, что называется property процедуры БД.
12 янв 10, 15:41    [8172009]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
AronovichAB,

Что выдаст:

SELECT
  OBJECT_NAME(object_id)
FROM
  sys.sql_modules 
WHERE
  execute_as_principal_id = USER_ID('тут имя пользователя, которого Вы хотите удалить')
12 янв 10, 15:51    [8172106]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
pkarklin,

ОГРОМНОЕ СПАСИБО !!!

Предложенный вами запрос дал процедуру, выполняемую от имени удаляемого пользователя.

Это же отражено менеджером в свойствах процедуры. Процедур у меня достаточно много и перебирать все "глазами" без запроса получалось медленно ... Нужен был запрос.

Остается узнать, почему в этой единственной процедуре так "интерпретируется" запись "EXECUTE AS SELF".
Я перекомпилил процедуру от имени "sa", но результат прежний. Можно конечно просто решить проблему удалением и созданием заново, но было бы полезно знать на будущее ...
12 янв 10, 16:00    [8172194]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
alexeyvg,

спасибо вам за внимание и участие.
12 янв 10, 16:07    [8172256]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31219
AronovichAB
alexeyvg,

спасибо вам за внимание и участие.
pkarklin-у спасибо скажите :-)
12 янв 10, 16:42    [8172630]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Остается узнать, почему в этой единственной процедуре так "интерпретируется" запись "EXECUTE AS SELF".


The actual user ID of the person creating or modifying the modules is stored in the execute_as_principal_id column in the sys.sql_modules.

автор
Я перекомпилил процедуру от имени "sa", но результат прежний.


Вы сделали ALTER PROC, залогиневшись под sa?
12 янв 10, 16:51    [8172725]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
alexeyvg,

уже сказал :)
Процедуру удалил и создал заново. Помогло. Пользователя удалил.

Но веселье продолжается !!!

Удалял я пользователя потому, что он имел права, которых я ему вроде как не давал. После удаления пользователя и соответствующего логина, создал логин и пользователя заново с прежними именами. Скриптом, который для всех пользователей один. И, о чудо, имею прежнюю картину. Пользователь имеет права на доступ к объектам и данным при наличии видимого единственного права "connect".

С другими пользователями, созданными тем же скриптом, такой ситуации не наблюдается ...
Очень весело :)
Пока попытаюсь разобраться самостоятельно ....
12 янв 10, 16:55    [8172770]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
pkarklin,

совершенно верно, работаю от имени sa.

Правда, с моим выводом что не помогло я наверно поспешил. Смотрел результат в менеджере, и там обновлял данные по объекту (Refresh), но, возможно, этого было мало. Надо было обновлять данные всей базы ...
12 янв 10, 17:01    [8172833]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Скриптом, который для всех пользователей один.


И что это за скрипт?

автор
Пользователь имеет права на доступ к объектам и данным при наличии видимого единственного права "connect".



Гм...

sp_helprotect @username = 'public' 

???
12 янв 10, 17:03    [8172852]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
pkarklin,

скрипт - процедура для создания пользователей из приложения.
Если убрать "шелуху", то получается:
(местами динамические команды, ковычки я оставил как было. В общем все работает, логины и пользователи создаются.)
EXEC sp_addlogin @UserName, @passwd = @Password, @defdb = @CurrentDBName, @deflanguage = 'Russian'
USE master GRANT CONNECT SQL, VIEW SERVER STATE, CONTROL SERVER TO ['+@UserName+']
CREATE USER [' + @UserName + '] FOR LOGIN [' + @UserName + '] WITH DEFAULT_SCHEMA = [dbo]
EXEC sp_addrolemember ''role_users'', '''+ @UserName + '''

role_users - специально созданная в БД роль, где и описаны все права пользователей.
Я убираю эту роль у моего уникального пользователя, а права остаются! Я явно делаю REVOKE для всех интересующих меня объектов - результат тот же.
12 янв 10, 17:16    [8173013]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
USE master GRANT CONNECT SQL, VIEW SERVER STATE, CONTROL SERVER TO ['+@UserName+']


BOL-> Permissions Naming Conventions
The following describes the general conventions that are followed for naming permissions:

CONTROL

Confers ownership-like capabilities on the grantee. The grantee effectively has all defined permissions on the securable. A principal that has been granted CONTROL can also grant permissions on the securable. Because the SQL Server security model is hierarchical, CONTROL at a particular scope implicitly includes CONTROL on all the securables under that scope. For example, CONTROL on a database implies all permissions on the database, all permissions on all assemblies in the database, all permissions on all schemas in the database, and all permissions on objects within all schemas within the database.


А ниже приведене табличка с эффективными правами.
12 янв 10, 17:31    [8173147]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31219
AronovichAB
Я убираю эту роль у моего уникального пользователя, а права остаются! Я явно делаю REVOKE для всех интересующих меня объектов - результат тот же.
А предыдущего админа не увольняли случайно?
12 янв 10, 17:32    [8173152]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
alexeyvg,

прошу прощения, раньше ответить не мог.

Админа не увольняли потому что его не было и нет :)
Я разработчик системы и между делом админ СУБД ...
13 янв 10, 09:54    [8175221]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
pkarklin,

прошу прощения, раньше ответить не мог.

Интересно .... А почему с другими пользователями ситуация иная? Команды при создании одинаковые .....
13 янв 10, 10:06    [8175276]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
AronovichAB
Member

Откуда:
Сообщений: 62
pkarklin,

ваша версия все же верна. Проблема решается если не давать "CONTROL SERVER".
Как я проверял вчера ....
Еще раз БОЛЬШОЕ СПАСИБО.
13 янв 10, 13:10    [8176799]     Ответить | Цитировать Сообщить модератору
 Re: Не могу удалить пользователя БД MS SQL SERVER  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
AronovichAB
Интересно .... А почему с другими пользователями ситуация иная? Команды при создании одинаковые .....


Какая, "иная"?
13 янв 10, 13:11    [8176805]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить