Когда вы создаете новый логин в SQL Server, он выбирает db_owner по умолчанию

У меня возникли проблемы с созданием нового пользователя SQL в SQL Server 2008 R2. Когда я использую SQL Server Management Studio, он проверяет db_owner членство в роли по умолчанию. Я просто хочу создать нового пользователя SQL с доступом только для чтения. Даже при использовании следующего необработанного SQL он все равно создает пользователя с разрешением уровня db_owner.

<!-- language: lang-sql -->
CREATE LOGIN readonlyuser
WITH PASSWORD = '12345',CHECK_POLICY = OFF, DEFAULT_DATABASE=mydatabase
GO
USE mydatabase
GO
CREATE USER readonlyuser FOR LOGIN readonlyuser
GO
EXEC sp_addrolemember 'db_datareader', 'readonlyuser'

Теперь, если я войду в SQL Server Management Studio только что созданным пользователем, я в основном смогу получить доступ к любой таблице и изменить любые данные любым удобным для меня способом. Это именно то, чего я не хочу делать. Я хочу только читать данные, а не изменять какие-либо данные

Странная вещь, если я смотрю на роли для базы данных readonlyuser это внутри db_datareader и не в db_owner,

Так почему же SQL создает этого пользователя с db_owner уровень разрешений, что позволяет пользователю изменять данные?

Обновление 2013/08/07

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

Есть ли что-нибудь, что я могу проверить в этой базе данных? Обратите внимание, что конкретная база данных не была разработана мной. Это от стороннего поставщика. Так что не уверен, какие именно модификации они могли бы сделать.

Любая помощь с благодарностью.

4 ответа

Решение

Я столкнулся с той же проблемой.

Решение: sp_changedbowner. Это исправило это. (Каким-то образом владелец был поврежден)

Я не вижу проблем в запросе. И это сработало, как и ожидалось, когда я его протестировал. Просто для подтверждения, проверьте, правильно ли сопоставлен пользователь с необходимой базой данных (mydatabase), и db_datareader выбрано в окне свойств пользователя.

Чтобы расширить комментарий Грега, это, вероятно, происходит, когда восстановленная база данных принадлежала исходному серверу с помощью имени входа, которого нет на текущем (целевом) сервере. Информация на вкладке Общие - это первоначальный владелец (на исходном сервере), который не может быть отражен на вкладке Файлы, так как этот вход отсутствует на текущем сервере. В определенном смысле это "бесхозная база данных".

Я обнаружил, что это происходит со мной при добавлении логинов в базы данных, которые я восстановил на новом сервере. На вкладке "Файлы" свойств базы данных поле владельца не заполнено, даже если на вкладке "Общие" указан пользователь. Если я укажу в поле владельца действительный логин, проблема будет решена: для новых логинов по умолчанию не установлен флажок "db_owner".

Другие вопросы по тегам