2013-07-11 3 views
4

ПроблемаПользователь может создавать, но не выполнить хранимую процедуру,

У меня есть логин SQL Server, которому разрешено создавать хранимые процедуры, но не выполнять их. Я не могу использовать другой логин для выполнения выполнения, поэтому я ищу альтернативный способ запускать код в sp или предоставить эти разрешения.

Разрешение EXECUTE было отклонено по объекту 'sp_mystoredprocedurename', базе данных 'mydatabasename', схеме 'dbo'.

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

не может предоставить, запретить или отменить разрешения на прод, DBO, владелец объекта, information_schema, SYS, или самостоятельно.

фон

У нас есть программное приложение для Windows, написанный в Powerbuilder, который создает и обновляет базу данных SQL Server, он работает на себя.

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

По этой причине я сделал бы все, чтобы предотвратить необходимость повторного запроса пользователя для входа в систему администратора db, поэтому я могу предоставить разрешения на выполнение, что было бы самым простым способом ... Перенос всех серверов на SQL Server 2000 конечно, также не вариант :)

Хранимая процедура, которую я пытаюсь реализовать, является методом «getnewid». В настоящее время мой код Powerbuilder использует несколько встроенных инструкций TSQL для достижения этого, но из-за проблем с производительностью сети я хотел бы переместить их в одну хранимую процедуру.

+0

Нет администратора db, поэтому ** Я не могу использовать грант **. Я на 99% уверен, что это уловка 22, и поэтому невозможно решить. Я просто хотел бы услышать, если я что-то пропустил или если есть альтернатива. В SQL Server 2000 было возможно, если вам было разрешено создать хранимую процедуру, вам было разрешено ее выполнить. –

+0

HI, если вы ничего не делаете в своей логике sql, пользовательские функции (UDF) могут быть альтернативой. В случае, если у вас есть право выполнить или создать их. – DARKinVADER

ответ

3

Помогает ли это?

CREATE ROLE db_executer 
GRANT EXECUTE to db_executer 
EXEC sp_addrolemember N'db_executer', N'<username>' 
+0

Не боюсь, потому что зарегистрированный пользователь не может выполнять хранимые процедуры. Поэтому я не могу выполнить sp_addrolemember ... –

+0

@MartijnKooij нет, конечно, нет, вы не можете взломать базу данных, предоставив себе больше разрешений. Чтобы ваш пользователь мог выполнять все процедуры, в том числе сделанные в будущем, вам нужно для запуска этого скрипта. Для этого вам нужен администратор базы данных –

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