Драйвер собственного клиента PHP не хочет удалять индекс, созданный с помощью SQLCMD

Я создал базу данных из сценариев SQL, которые я запускал с SQLCMD, а также с некоторыми сценариями в SSMS. Я запускал их под тем же пользователем базы данных SQL.

Когда я хочу удалить индекс с помощью PHP-скрипта, работающего на IIS с драйвером sqlsrv, я получил ошибку 3701 (индекс не существует или недостаточно прав). Я уверен, что индекс существует.

Я включил своего пользователя базы данных SQL в sysadmin, db_ddladmin, db_owner.

Я пытался предоставить разрешение ALTER пользователю моей базы данных в соответствии с документацией SQL Server об удалении индекса. Я попробовал другой грант, который я прочитал на этом сайте, чтобы включить удаление индекса. Вот мой код:

GRANT CONTROL ON dbo.minutes_clients TO admin_igreffe

GRANT ALTER (representant) ON dbo.minutes_clients TO admin_igreffe

GRANT CREATE TABLE TO admin_igreffe

GRANT ALTER ON SCHEMA :: dbo TO admin_igreffe

Ничего, чтобы помочь мне. Я проверил разрешение на моем столе с:

SELECT * FROM fn_my_permissions('dbo.minutes_clients', 'OBJECT')

Я получил следующий результат:

entity_name             subentity_name                      permission_name
----------------------- ----------------------------------- ----------------
dbo.minutes_clients                                         SELECT
dbo.minutes_clients                                         UPDATE
dbo.minutes_clients                                         REFERENCES
dbo.minutes_clients                                         INSERT
dbo.minutes_clients                                         DELETE
dbo.minutes_clients                                         EXECUTE
dbo.minutes_clients                                         RECEIVE
dbo.minutes_clients                                         VIEW CHANGE     TRACKING
dbo.minutes_clients                                         VIEW DEFINITION
dbo.minutes_clients                                         ALTER
dbo.minutes_clients                                         TAKE OWNERSHIP
dbo.minutes_clients                                         CONTROL
dbo.minutes_clients     id_minute                           SELECT
dbo.minutes_clients     id_client                           SELECT
dbo.minutes_clients     representant                        SELECT
dbo.minutes_clients     id_minute                           UPDATE
dbo.minutes_clients     id_client                           UPDATE
dbo.minutes_clients     representant                        UPDATE
dbo.minutes_clients     id_minute                           REFERENCES
dbo.minutes_clients     id_client                           REFERENCES
dbo.minutes_clients     representant                        REFERENCES

(21 affected row(s))

Индекс, который я хочу удалить, находится в столбце представителя. Я вижу, что у меня нет разрешения ALTER на этот конкретный столбец. Это проблема? Как я могу сделать это с помощью сценария SQL?

0

Решение

Я нашел решение после 2-4 дней испытаний и исследований. Проблема не имеет ничего общего с разрешением. Я должен опубликовать SQL-запрос, который я использовал для удаления моего индекса:

DROP INDEX fki_minutes_clients_representant_fkey ON minutes_clients.representant

Это проблема. Мой запрос не указывает на индекс fki_minutes_clients_represenant_fkey в таблице minutes_clients столбца-представителя. Таким образом, сообщение об ошибке, которое я получил, было правильным, но неоднозначным: не удается найти индекс (правильно!) Или у вас нет разрешения удалить этот индекс (неправильно!).

Вот правильный синтаксис, который я должен использовать, чтобы отбросить мой индекс:

DROP INDEX minutes_clients.representant

или же

DROP INDEX fki_minutes_clients_representant_fkey ON minutes_clients

Надеюсь, это будет полезно для кого-то

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]