Разрешение SELECT было отклонено для объекта "Пользователи", базы данных "XXX", схемы "dbo",
Я переместил базу данных с SQL Server 2012 на Azure. Я не хочу использовать пользователя master
, поэтому я создал пользователя test
. Это то, что я сделал для базы данных XXX на Azure:
create user test from login test with default_schema=[dbo]
exec sp_addrolemember 'db_owner','test'
Я проверил, и объекты базы данных, которые меня интересуют, находятся в схеме dbo
. Таблица Users
находится в схеме dbo
.
В строке подключения в моем веб-проекте есть test
. Он выдает сообщение об ошибке:
The SELECT permission was denied on the object 'Users', database 'XXX', schema 'dbo'
Что означает сообщение об ошибке и что я могу сделать, чтобы позволить пользователю test
получить доступ к базе данных XXX?
Ответы
Ответ 1
Я думаю, что проблема в том, что у пользователя есть привилегии. Эта ошибка возникает, когда созданный вами пользователь не имеет достаточных прав для доступа к вашим таблицам в базе данных. Предоставьте привилегию пользователю, чтобы получить то, что вы хотите.
Предоставьте пользовательские разрешения, такие как SELECT, INSERT, UPDATE и DELETE для таблиц в этой базе данных.
Ответ 2
Синтаксис для разрешения выбора:
USE YourDB;
GRANT SELECT ON dbo.functionName TO UserName;
Ответ 3
Вот так я смог решить проблему, когда столкнулся с ней
- Запустите SQL Management Studio.
- Разверните узел сервера (в "Обозревателе объектов").
- Разверните узел "Базы данных", а затем разверните конкретную базу данных, к которой вы пытаетесь получить доступ, используя определенного пользователя.
- Разверните узел "Пользователи" под узлом "Безопасность" для базы данных.
- Щелкните правой кнопкой мыши по конкретному пользователю и выберите "Свойства". Вы получите диалоговое окно.
- Убедитесь, что пользователь является членом группы db_owner (прочитайте комментарии ниже, прежде чем использовать этот путь) и внесите другие необходимые изменения, используя представление. (Я использовал это для 2016 года. Не уверен, как конкретный диалог выглядит в другой версии и, следовательно, не является конкретным)
Ответ 4
- Откройте SQL Management Studio
- Расширьте свою базу данных
- Разверните папку "Безопасность"
- Разверните "Пользователи"
- Щелкните правой кнопкой мыши пользователя (тот, который пытается выполнить запрос) и выберите
Properties
. - Выберите страницу
Membership
. -
Убедитесь, что вы сняли флажок
db_denydatareader
db_denydatawriter
![enter image description here]()
Это должно быть само собой разумеющимся, но только предоставлять разрешения на то, что нужно пользователю. Простое ленивое решение - проверить db_owner
как у меня, но это не лучшая практика безопасности.
Ответ 5
Необходимы разрешения для этого пользователя
Ответ 6
Проверьте пространство вашей базы данных. Эта ошибка возникает, когда пространство увеличивается по сравнению с пространством, данным базе данных.
Ответ 7
Я решаю свою проблему, делая это. [ВАЖНОЕ ПРИМЕЧАНИЕ: он позволяет расширить (расширить) привилегии для конкретной учетной записи, возможно, больше, чем необходимо для отдельного сценария].
- Перейдите в " Обозреватель объектов " в SQL Management Studio.
- Разверните Безопасность, затем войдите.
- Выберите пользователя, с которым вы работаете, затем щелкните правой кнопкой мыши и выберите Свойства.
- В разделе "Выбор страницы" выберите " Роли сервера".
- Кликни на сисадмина и сохрани.
Ответ 8
Используя SSMS, я убедился, что у пользователя есть права на подключение как к базе данных, так и к ReportServer.
В конкретной запрашиваемой базе данных в свойствах я сопоставил их учетные данные и включил режим чтения данных и общедоступные разрешения. Кроме того, как заявили другие, я позаботился о том, чтобы не было выбрано никаких блоков для удаления/удаления.
Я не хотел включать владение БД для их отчетов, так как им нужно было только выбрать права доступа.