Как предоставить доступ к разрешениям на изменение для всех таблиц SQL?

#sql #sql-server #permissions #impersonation #procedure

#sql #sql-server #разрешения #олицетворение #процедура

Вопрос:

Пожалуйста, обратитесь к следующей хранимой процедуре SQL:

 ALTER PROCEDURE cspFieldAccess
@Tbl varchar(20),
@Fld varchar(20),
@Usr varchar(35),
@Dny varchar(5),
@All varchar(5)

AS
DECLARE @sql nvarchar(max)
IF @Dny = 'Y' and @All = 'Y' 
set @sql='DENY UPDATE ON [' @Tbl '] (' @Fld ') TO [MCCOSKERSViewPoint Production Users]'

ELSE IF @Dny = 'Y' and @All = 'N'
set @sql='DENY UPDATE ON [' @Tbl '] (' @Fld ') TO [' @Usr ']'

ELSE IF @Dny = 'N' and @All = 'Y' 
set @sql='GRANT UPDATE ON [' @Tbl '] (' @Fld ') TO [MCCOSKERSViewPoint Production Users]'

ELSE IF @Dny = 'N' and @All = 'N'
set @sql='GRANT UPDATE ON [' @Tbl '] (' @Fld ') TO [' @Usr ']'

exec sp_executesql @sql
  

Я могу отлично выполнить эту процедуру в SQL (как SA), но я хочу, чтобы она работала в приложении под названием Viewpoint Construction Software.

В принципе, процедура позволит пользователю указать пользователя, таблицу и поле, а затем запретить доступ к изменению поля. Если параметр «@ALL равен «Y», то он будет применяться ко ВСЕМ пользователям.

Когда я запускаю это из Viewpoint, я получаю сообщение об ошибке «Не удается найти объект ‘PREH’ «.

К вашему сведению: «PREH» — это таблица, которая вводится в Viewpoint.

Я предполагаю, что эта ошибка возникает из-за того, что пользователь, с которым я вошел в систему, не имеет разрешения запретить обновление PREH. Как я могу предоставить этот доступ пользователю для ВСЕХ таблиц?

В качестве альтернативы, возможно ли выполнить процедуру как «SA», а затем предоставить права олицетворения пользователям, к которым я хочу иметь доступ для этого?

Ответ №1:

Для этого есть несколько способов.

  1. Предоставьте им CONTROL разрешение либо на уровне схемы, либо на уровне базы данных. Обратите внимание, что это для большинства целей и целей владения, и поэтому предоставляется возможность изменять, Удалять и т. Д. На предоставленном уровне
  2. Подпишите свою процедуру сертификатом, создайте пользователя на основе указанного сертификата, предоставьте соответствующие разрешения (см. Выше) пользователю сертификата и, наконец, предоставьте разрешение на процедуру тому, кому вы хотите ее запустить. Преимущество этого заключается в том, что ваши пользователи могут делать только то, что вы создали для них, не раздавая ключи от замка. Но это сопряжено со сложностью.