2013-03-19 2 views
0

Мне нужно разрешить клиенту в среде dev DW SQL 2K8R2, просматривать и убивать процессы, но я не хочу предоставлять этому пользователю (0) это VIEW SERVER STATE (он является бывшим sql dba и считается потенциальной внутренней угрозой) ,Пользователь sp_who/sp_whoUsers

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

USE [master] GO 

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO 

CREATE PROCEDURE [dbo].[usp_who] with execute as owner AS BEGIN SET NOCOUNT ON; exec master.dbo.sp_who; END 

Изменение «с исполнением как» на «я» (я - системный администратор) возвращает те же результаты. Я также попробовал ниже, вместо того, чтобы звонить sp_who, и он возвращает только одну строку.

select * from sysprocesses Кажется, что контекст не переключается или не сохраняется во время выполнения процедуры. И это не значит, что я позволю этому человеку «убить» процессы.

Есть ли у кого-нибудь решение или какие-то предложения по этой уникальной проблеме?

+0

Это во многом дубликат вашего [предыдущего вопроса] (http://stackoverflow.com/questions/15437168/custom-sp-who-without-granting-view-server-state) – Pondlife

ответ

0

Это, безусловно, звучит как уникальная ситуация. Я основываюсь ниже на том, что на эту проблему не существует решение, не связанное с машинами/людьми или бизнес-процессами (например, не существует политики, которая может быть использована для отказа в доступе к клиенту и поэтому, по сути, устраняет проблему).

Так что с помощью технологического решения я не знаю ни одного чисто основанного на SQL решения для этого, но мои знания в области DBA ограничены. Однако то, что вы могли бы сделать, это:

  1. Создание веб-приложений ASP.NET (возможно, веб-форм было бы хорошо здесь, а не MVC, но это только мое мнение), которые при развертывании будет установлен для запуска в качестве приложения Идентификатор пула как конкретная учетная запись службы, созданная в вашем AD (например, svc_KillProcessAccount).
  2. Учетная запись службы будет предоставлена ​​для доступа к базе данных (с учетом любых минимальных привилегий), и никто не должен знать пароль, кроме человека, настраивающего идентификатор пула приложений (и мы будем считать это является доверенным лицом)
  3. веб-приложение может использовать SMO в список и kill процессы
  4. Я хотел бы также сказать, что веб-приложение должно написать какую-то ревизорскими или аналогичный, когда рассматривались процессы и убили
  5. веб приложение может также нуждаться в безопасности вокруг него с точки зрения проверки подлинности и авторизации, чтобы ограничить пользователей, которые потенциально могут использовать i т (например, ограничить его к одной AD группы, которая контролируется администратором где-то)

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

Я думаю, что с помощью SMO и такого рода мощь приложения, которое вам нужно было бы быть осторожным.

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

К сожалению, что последний пункт был немного упрямый - вы, вероятно, не нужно, чтобы меня закрепляющая все, что :-)

HTH (в некотором роде, по крайней мере) и удачи! Nathan

Смежные вопросы