Разрешение INSERT было отклонено для объекта «Драйвер»

Я пытаюсь запустить следующий скрипт из SQL Server Management Studio:

INSERT [Truck].[Driver] ([DriverId], [CorporationId], [DriverNumber], [Name], [PhoneNumber]) 
VALUES (N'b78f90a6-ed6d-4f0e-9f35-1f3e9c516ca9', N'0a48eeeb-37f6-44de-aff5-fe9107d821f5', N'12', N'Unknown', NULL)

И я получаю эту ошибку:

Сообщение 229, уровень 14, состояние 5, строка 1
Отказано в разрешении INSERT для объекта «Водитель», база данных «SuburbanPortal2», схема «Грузовик».

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

Но вот настройки базы данных для моего пользователя:

введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения

Какие-либо предложения?


person ErocM    schedule 12.07.2013    source источник
comment
Можете ли вы предоставить ConnectionString? Также попробуйте SQL Profiler, чтобы узнать, что происходит.   -  person Ralf de Kleine    schedule 12.07.2013
comment
У вас, кажется, есть все разрешения..... на схему [dbo]. Но ваша таблица находится в схеме [Truck]; у вас тоже есть права на эту схему??   -  person marc_s    schedule 12.07.2013
comment
Глупый вопрос, но разве он не должен быть ВСТАВЛЕННЫМ В [Грузовик].[Водитель]   -  person Andrew    schedule 12.07.2013
comment
@ Эндрю, INTO не является обязательным. msdn.microsoft.com/en-us/library/ms174335 (SQL.105).aspx   -  person JSR    schedule 12.07.2013
comment
Ну тогда каждый день узнаешь что-то новое :)   -  person Andrew    schedule 12.07.2013
comment
@RalfdeKleine У меня нет строки подключения, я использую Sql Server Management Studio. Я запускаю его как скрипт оттуда.   -  person ErocM    schedule 12.07.2013
comment
@Andrew Кроме того, этот скрипт был создан SSMS из другой базы данных с таким же макетом.   -  person ErocM    schedule 12.07.2013
comment
@marc_s Я владелец БД, не уверен, что это имеет значение. Я проверил все схемы, чтобы быть владельцем, и он показывает синее поле, не уверен, что это именно то, что означает без флажка, но это не позволит мне проверить или снять их.   -  person ErocM    schedule 12.07.2013
comment
А как насчет INSERT [Dbo].[Driver] ([DriverId], ... ?   -  person Yuriy Galanter    schedule 12.07.2013
comment
Я не уверен, почему мне пришлось это сделать, я не эксперт по Sql Server, но как только я добавил себя в основную базу данных, я смог выполнить запрос. Если у кого-то есть ответ на это, я хотел бы знать. В противном случае, через некоторое время я опубликую это как свой сбитый с толку ответ.   -  person ErocM    schedule 12.07.2013
comment
ErocM - вы переместили или скопировали эту базу данных с другого сервера? Если это так, пользовательские SSID могут быть искажены.   -  person Graeme    schedule 12.07.2013
comment
В противном случае на ум приходит несколько вещей: 1) вы разработчик, поэтому вы должны быть членом системного администратора на своем ПК. Так ли это? 2) использовать CREATE ROLE Truck_Users AUTHORIZATION dbo; а затем используйте sp_addrolemember, чтобы добавить своих пользователей в ROLE. Наконец, используйте операторы GRANT для предоставления разрешений ROLE, например GRANT INSERT ON OBJECT::[Truck].[Driver] TO [Truck_Users]; Существуют и другие разрешения, такие как GRANT ALL, которое дает роли все.   -  person Graeme    schedule 12.07.2013
comment
@Graeme Да, это было восстановление из резервной копии. Поместите это как ответ, и я проголосую за вас, пожалуйста :)   -  person ErocM    schedule 12.07.2013


Ответы (1)


-- Use master
USE msdb;
go

-- Make database
CREATE DATABASE SuburbanPortal2;
go

-- Use the database
USE SuburbanPortal2;
GO

-- Make schema
CREATE SCHEMA Truck AUTHORIZATION dbo;
go

-- Make table
CREATE TABLE Truck.Driver
(
    [DriverId] uniqueidentifier,
    [CorporationId] uniqueidentifier,
    [DriverNumber] varchar(64),
    [Name] varchar(128),
    [PhoneNumber] varchar(12)
);

-- Add data
INSERT [Truck].[Driver] ([DriverId], [CorporationId], [DriverNumber], [Name], [PhoneNumber]) 
VALUES (N'b78f90a6-ed6d-4f0e-9f35-1f3e9c516ca9', N'0a48eeeb-37f6-44de-aff5-fe9107d821f5', N'12', N'Unknown', NULL);
GO

Этот код настраивает образец базы данных, как у вас. У меня нет проблем со вставкой.

Кто владелец схемы??

Если вы хотите скрыть таблицы из одной группы баз данных и из другой, добавьте своего пользователя в группу баз данных.

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

Можете ли вы углубиться в базу данных -> безопасность -> схемы -> Грузовик, щелкните правой кнопкой мыши и покажите мне владельца схемы. Пожалуйста, разместите изображение.

Кроме того, удалите все права доступа к базе данных для пользователя, кроме db_owner.

person CRAFTY DBA    schedule 12.07.2013