Не удалось найти объект так как он не существует или отсутствуют разрешения sql
Перейти к содержимому

Не удалось найти объект так как он не существует или отсутствуют разрешения sql

  • автор:

Не удалось найти объект так как он не существует или отсутствуют разрешения sql

Добрый день, уважаемые.
Дернул меня черт включить поддержку filestream в базе. Теперь задание копирования базы выполняется некорректно. Копия базы создается, но оригинал не поднимается. Из-за того, что имя каталога filestream у них одинаковое
Как быть в этой ситуации? Выключил filestream в sql сервере, но поле "Имя каталога FILESTREAM" в свойствах базы, теперь невозможно удалить.
Задание, которое заканчивается теперь с ошибкой, копирует базу на этот же сервер, но с другим именем базы. Копирование происходит путем отключения базы (первый способ в мастере копирования)

  • Изменено SokRus 4 июня 2014 г. 13:20

Ответы

USE [master]
GO
ALTER DATABASE [trade_copy] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF, DIRECTORY_NAME = NULL ) WITH NO_WAIT
GO

  • Помечено в качестве ответа SokRus 6 июня 2014 г. 7:39

Все ответы

Ребята, дело срочное 🙂

Ночью снова запуститься задание копирования базы, а утром основной базы не окажется в доступе. Ее придется вручную присоединять, перед этим изменив "Имя каталога FILESTREAM" у копии. Иначе присоединение не выйдет, "Имя каталога FILESTREAM" одинаковое у оригинала и копии 🙁

Как сделать пустым поле "Имя каталога FILESTREAM" в свойствах базы? Собственно, как и было до включения filestream

Не удается найти объект, так как он не существует или у вас нет разрешений, ошибка в SQL Server

У меня есть база данных и сценарий sql для добавления некоторых полей в таблицу под названием «Продукты» базы данных.

Но когда я выполняю этот скрипт, я получаю следующую ошибку:

Почему произошла ошибка и что я должен сделать, чтобы устранить ее?

15 ответов

Вы уверены, что выполняете сценарий для правильной базы данных? В SQL Server Management studio вы можете изменить базу данных, к которой вы выполняете запрос, в раскрывающемся списке на одной из панелей инструментов, или вы можете запустить свой запрос с помощью этого:

Я нашел причину, почему это произойдет. У пользователя были соответствующие разрешения, но хранимая процедура включала инструкцию TRUNCATE:

Поскольку TRUNCATE удаляет элементы без регистрации, вам (очевидно) необходимы повышенные разрешения для выполнения хранимой процедуры, которая ее содержит. Мы изменили заявление на:

УДАЛИТЬ ИЗ TableName

Это также может произойти из-за опечатки в ссылке на таблицу, такую ​​как [dbo.Product] вместо [dbo].[Product] ,

Видит ли пользователь, под которым вы выполняете этот скрипт, даже эту таблицу?

Вы получаете какой-либо выход для этого?

Если да: имеет ли этот пользователь право изменять таблицу, т.е. выполнять сценарии DDL, такие как ALTER TABLE так далее.? Как правило, обычные пользователи не имеют таких повышенных разрешений.

Найдите в скрипте любую операцию DDL. Возможно, у пользователя нет прав на запуск изменений.

В моем случае это было SET IDENTITY_INSERT tblTableName ON

Вы можете добавить db_ddladmin для всей базы данных или только для таблицы, чтобы решить эту проблему (или изменить сценарий)

Также возможно, что вы создали «Продукты» в своей схеме входа в систему и пытались выполнить то же самое в другой схеме (возможно, dbo)

Шаги, чтобы решить эту проблему

1) открыть студию управления 2) найти объект в проводнике и определить схему, под которой находится ваш объект? (это текст перед именем вашего объекта). На изображении ниже его «dbo» и мое имя объекта является статусом действия

выделенная часть является именем схемы

если вы видите его как «yourcompanydoamin\yourloginid», то вам следует изменить разрешение для этой конкретной схемы, а не для любой другой схемы.

Вы можете щелкнуть правой кнопкой мыши по процедуре, выбрать свойства и посмотреть, какие разрешения предоставляются вашему логину. Затем вы можете вручную отметить «Выполнить» и изменить разрешение для процедуры.

Или написать это:

Это может быть проблема с разрешением. Пользователю необходимо как минимум разрешение ALTER для усечения таблицы. Другой вариант — вызвать DELETE FROM вместо TRUNCATE TABLE, но эта операция медленнее, потому что она записывает в файл журнала, тогда как TRUNCATE не записывает в файл журнала.

Минимальное необходимое разрешение — ALTER для table_name. Разрешения TRUNCATE TABLE по умолчанию принадлежат владельцу таблицы, членам фиксированной роли сервера sysadmin и фиксированным ролям базы данных db_owner и db_ddladmin и не подлежат передаче. Однако вы можете включить оператор TRUNCATE TABLE в модуль, например в хранимую процедуру, и предоставить ему соответствующие разрешения с помощью предложения EXECUTE AS.

Я пытался скопировать таблицу из PROD в DEV, но получил ошибку: «Не удается найти объект X, потому что он не существует или у вас нет прав».

Однако таблица существовала, и я работал как sa, поэтому у меня были разрешения.

Проблема была на самом деле с ОГРАНИЧЕНИЯМИ. Я переименовал таблицу на DEV в old_XXX несколько месяцев назад. Но когда я попытался скопировать оригинал из PROD, имена ограничений Defaut столкнулись.

Сообщение об ошибке вводило в заблуждение

Делюсь своим делом, надеюсь, это поможет.

В моей ситуации внутри MY_PROJ.Database->MY_PROJ.Database.sqlproj Я должен был поставить это:

В моем случае я работал под другим пользователем, чем тот, которого я ожидал.

я имел ‘DRIVER=;SERVER=. ;DATABASE=. ;Trusted_Connection=false;User > в качестве строки подключения я передал pypyodbc.connect() , но соединение все еще использовало учетные данные пользователя Windows, который запустил сценарий (я проверил это, используя SQL Server Profiler и попробовав неверную комбинацию uid/ пароль — что не привело к ожидаемой ошибке).

Я решил не углубляться в это дальше, так как переход на этот лучший способ подключения устраняет проблему:

В моем случае версия sql-сервера на моем локальном хосте выше, чем на производственном сервере, и поэтому в сгенерированный скрипт с локального хоста были добавлены некоторые новые переменные. Это в первую очередь вызывало ошибки при создании таблицы. Поскольку создание таблицы не удалось, последующий запрос к таблице «НЕ СУЩЕСТВУЕТ» также не удался. К счастью, среди длинного списка ошибок sql я обнаружил, что это «OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF» является новой переменной в сценарии, вызывающей мою проблему. Я сделал поиск и замену, и ошибка исчезла. Надеюсь, это кому-то поможет.

Оператор TRUNCATE был моей первой проблемой, и я был рад найти здесь решение. Но я использовал SSIS и пытался загрузить данные из другой базы данных, и это не удалось с той же ошибкой в ​​любой таблице, которая использовала IDENTITY для создания автоматически увеличивающегося идентификатора. Если бы я сам писал сценарий, мне сначала нужно было бы использовать команду SET IDENTITY_INSERT tablename ON, а затем SET IDENTITY_INSERT tablename OFF, когда было выполнено обновление таблицы. Но для этого требуются разрешения ALTER для таблицы, которых у меня нет. Следовательно, сообщение об ошибке в SSIS при загрузке таблицы (хотя на предыдущем шаге только что были удалены все данные из таблицы).

Вы получаете эту ошибку, когда используете ORM, например GORM (https://gorm.io/ ) в Go, например.

Когда вы пытаетесь создать структуру и случайно передаете идентификатор (первичный ключ), хотя он вставляется автоматически.

Богатые возможности IDE, такие как Visual Studio Code, позволяют легко допустить эту ошибку:

Вы по-прежнему можете использовать автозаполнение с помощью кода Visual Studio, но удалите свою запись для первичных ключей вашей модели:

Не удается найти объект, поскольку он не существует или у вас нет разрешений, ошибка в SQL Server

У меня есть база данных и есть SQL-скрипт для добавления некоторых полей в таблицу под названием «Продукты» базы данных.

но когда я выполняю этот скрипт, я получаю следующую ошибку:

почему произошла ошибка и что я должен сделать, чтобы ее разрешить?

9 ответов

вы уверены, что выполняете скрипт против правильной базы данных? В среде SQL Server Management studio можно изменить базу данных, к которой выполняется запрос, в раскрывающемся списке на одной из панелей инструментов или запустить запрос следующим образом:

Я нашел причину, почему это будет происходить. Пользователь имел соответствующие разрешения, но хранимая процедура включала оператор усечения:

усечь имя таблицы

поскольку TRUNCATE удаляет элементы без регистрации, вам (по-видимому) нужны повышенные разрешения для выполнения хранимой процедуры, содержащей его. Мы изменили утверждение на:

удалить из TableName

. и ошибка исчезла!

пользователь, который вы выполняете этот скрипт, даже видит эту таблицу??

вы получаете какой-либо выход для этого??

Если да: имеет ли этот пользователь разрешение на изменение таблицы, т. е. выполнение сценариев DDL, таких как ALTER TABLE etc.? Как правило, у обычных пользователей нет таких повышенных разрешений.

Это также может произойти из-за опечатки при ссылке на таблицу, такую как [dbo.Product] вместо [dbo].[Product] .

также возможно, что вы создали «продукты» в своей схеме входа в систему, и вы пытались выполнить то же самое в другой схеме (возможно, dbo)

шаги для решения этой проблемы

1) Откройте студию управления 2) найдите объект в проводнике и определите схему, в которой находится ваш объект? ( это текст перед именем объекта ). На изображении ниже его «dbo» и мое имя объекта-действие статус

highlighted part is schema name

Если вы видите его как «yourcompanydoamin\yourloginid», то вы должны вы можете изменить разрешение на эту конкретную схему, а не любую другую схему.

вы можете щелкнуть правой кнопкой мыши процедуру, выбрать Свойства и посмотреть, какие разрешения предоставляются вашему идентификатору входа. Затем вы можете вручную проверить» выполнить » и изменить разрешение для proc.

или написать это было бы:

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

Я ‘DRIVER=;SERVER=. ;DATABASE=. ;Trusted_Connection=false;User > как строка соединения, которую я передал pypyodbc.connect() , но соединение все еще использовало учетные данные пользователя Windows, который запустил сценарий (я проверил это с помощью профилировщика SQL Server и попробовал недопустимую комбинацию uid/пароля, что не привело к ожидаемой ошибке).

я решил не копаться в этом дальше, после перехода на этот способ подключение Исправлена ошибка:

Я пытался скопировать таблицу из PROD в DEV, но получил ошибку: «Не удается найти объект X, потому что она не существует или у вас нет разрешения.»

однако таблица существовала, и я работал как sa, поэтому у меня были разрешения.

проблема была на самом деле с контрацептивами. Я переименовал таблицу на DEV в old_XXX несколько месяцев назад. Но когда я попытался скопировать оригинал из PROD, имена ограничений Defaut столкнулись.

Не удается найти объект, потому что он не существует или у вас нет разрешений. Ошибка в SQL Server

У меня есть база данных и сценарий Sql для добавления некоторых полей в таблицу под названием «Продукты» в базе данных.

Но когда я выполняю этот сценарий, я получаю следующую ошибку:

Почему возникает ошибка и что мне делать для ее устранения?

задан 16 июля ’09, 07:07

который sql скрипт ? — Kiquenet

Это может быть связано с разрешениями. Является ли пользователь участником роли db_owner? — Tarzan

Я нашел ответ на свой случай в другая строка — Circle Hsiao

13 ответы

Вы уверены, что выполняете сценарий для правильной базы данных? В SQL Server Management studio вы можете изменить базу данных, к которой вы выполняете запрос, в раскрывающемся списке на одной из панелей инструментов, или вы можете начать свой запрос следующим образом:

Создан 16 июля ’09, 11:07

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

С TRUNCATE удаляет элементы без регистрации, вам (по-видимому) нужны повышенные разрешения для выполнения хранимой процедуры, которая его содержит. Мы изменили заявление на:

. и ошибка исчезла!

Создан 08 июля ’19, 14:07

Оператор усечения тоже был проблемой для меня. Это исправлено добавлением соответствующих разрешений для усечения. — Эндрю

Это должно быть зарегистрировано как ошибка сервера sql. Сообщение об ошибке: «Не удается найти объект x . », но проблема связана с разрешениями объекта, отличного от x. Нет, сообщение об ошибке не «Не удается найти объект x, потому что он не существует. Или у вас нет прав». Хотя это несуществующее сообщение об ошибке может дать немного больше подсказки, оно все же не так полезно, как сообщение об ошибке, указывающее на правильный объект с проблемой разрешения. — Сэм

Это была именно моя проблема — он отлично работал с моим локальным пользователем, но не использовал сервисную учетную запись в производственной среде — спасибо! — Гарпуний

Исправлена ​​и моя непонятная проблема! БЛАГОДАРНОСТЬ! — Барри Сеймур

Это также может произойти из-за опечатки при ссылке на таблицу, например [dbo.Product] вместо [dbo].[Product] .

ответ дан 16 дек ’15, 11:12

Видит ли пользователь, под которым вы выполняете этот скрипт, эту таблицу?

Есть ли у вас какие-нибудь результаты?

Если да: есть ли у этого пользователя разрешение на изменение таблицы, т.е. выполнение сценариев DDL, например ALTER TABLE так далее.? Как правило, обычные пользователи не имеют таких повышенных разрешений.

ответ дан 17 окт ’17, 15:10

Также возможно, что вы создали «Продукты» в своей схеме входа в систему и пытались выполнить то же самое в другой схеме (возможно, dbo).

Действия по устранению этой проблемы

1) откройте студию управления 2) Найдите объект в проводнике и определите схему, в которой находится ваш объект? (это текст перед названием вашего объекта). На изображении ниже это «dbo», а имя моего объекта — статус действия.

выделенная часть - это имя схемы

если вы видите его как «yourcompanydoamin \ yourloginid», тогда вы можете изменить разрешение для этой конкретной схемы, а не для какой-либо другой схемы.

ответ дан 04 дек ’15, 10:12

Вы можете щелкнуть процедуру правой кнопкой мыши, выбрать свойства и посмотреть, какие разрешения предоставлены вашему идентификатору входа. Затем вы можете вручную установить флажок «Выполнить» и изменить разрешение для процедуры.

Или, чтобы написать сценарий, это было бы так:

ответ дан 17 окт ’17, 12:10

Процедура выполняется . проблема в доступе к таблице, а не в самой процедуре. — Джеймс Ньютон

Найдите в скрипте любую операцию DDL. Возможно, у пользователя нет прав на запуск изменений.

В моем случае это было SET IDENTITY_INSERT tblTableName ON

Вы можете добавить db_ddladmin для всей базы данных или только для таблицы, чтобы решить эту проблему (или изменить сценарий)

Создан 14 июля ’20, 11:07

Я пытался скопировать таблицу из PROD в DEV, но получаю сообщение об ошибке: «Не могу найти объект X, потому что он не существует или у вас нет разрешений».

Однако таблица действительно существовала, и я работал как sa, поэтому у меня были разрешения.

На самом деле проблема заключалась в ПРОТИВОПОКАЗАНИЯХ. Я переименовал таблицу на DEV в old_XXX месяцев назад. Но когда я попытался скопировать оригинал из PROD, имена ограничений Defaut столкнулись.

Сообщение об ошибке вводило в заблуждение

Создан 03 июля ’17, 00:07

Вам следует добавить воспроизводимый код, чтобы ваш ответ был легким для понимания. — М. Касим

Извините, я использую только графический интерфейс SSIS. Есть ли способ передать это без кучи скриншотов? — Джон Хантер

Это может быть проблема с разрешением. Для усечения таблицы пользователю требуется как минимум разрешение ALTER. Другой вариант — вызвать DELETE FROM вместо TRUNCATE TABLE, но эта операция медленнее, потому что она записывает в файл журнала, тогда как TRUNCATE не записывает в файл журнала.

Минимальное необходимое разрешение — ALTER для table_name. Разрешения TRUNCATE TABLE по умолчанию принадлежат владельцу таблицы, членам фиксированной роли сервера sysadmin и фиксированным ролям базы данных db_owner и db_ddladmin и не подлежат передаче. Однако вы можете включить оператор TRUNCATE TABLE в модуль, например хранимую процедуру, и предоставить ему соответствующие разрешения с помощью предложения EXECUTE AS.

В моем случае я работал под другим пользователем, чем тот, которого я ожидал.

У меня было ‘DRIVER=;SERVER=. ;DATABASE=. ;Trusted_Connection=false;User > в качестве строки подключения, которую я передал pypyodbc.connect() , но соединение по-прежнему использовало учетные данные пользователя Windows, запустившего сценарий (я проверил это с помощью SQL Server Profiler и попытался ввести недопустимую комбинацию uid / пароль, что не привело к ожидаемой ошибке).

Я решил не вдаваться в подробности, поскольку переход на этот лучший способ подключения устранил проблему:

ответ дан 10 апр.

Поделившись моим случаем, надеюсь, что это поможет.

В моей ситуации внутри MY_PROJ.Database->MY_PROJ.Database.sqlproj Пришлось поставить это:

В моем случае версия sql-сервера на моем локальном хосте выше, чем на производственном сервере, и, следовательно, в сгенерированный скрипт с локального хоста были добавлены некоторые новые переменные. Это в первую очередь вызывало ошибки при создании таблицы. Поскольку создание таблицы не удалось, последующий запрос к таблице «НЕ СУЩЕСТВУЕТ» также не удался. К счастью, среди длинного списка ошибок sql я обнаружил, что это «OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF» является новой переменной в сценарии, вызывающей мою проблему. Я выполнил поиск и замену, и ошибка исчезла. Надеюсь, это кому-то поможет.

ответ дан 01 мая ’20, 20:05

Оператор TRUNCATE был моей первой проблемой, и я был рад найти здесь решение. Но я использовал SSIS и пытался загрузить данные из другой базы данных, и это не удалось с той же ошибкой в ​​любой таблице, которая использовала IDENTITY для создания автоматически увеличивающегося идентификатора. Если бы я сам писал сценарий, мне сначала нужно было бы использовать команду УСТАНОВИТЬ IDENTITY_INSERT имя таблицы ON, а затем УСТАНОВИТЬ IDENTITY_INSERT имя таблицы OFF когда было выполнено обновление таблицы. Но для этого требуются разрешения ALTER для таблицы, которых у меня нет. Следовательно, сообщение об ошибке в SSIS при загрузке таблицы (хотя на предыдущем шаге только что были удалены все данные из таблицы).

ответ дан 01 окт ’20, 03:10

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками sql-server or задайте свой вопрос.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *