Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Хранимая процедура  [new]
Чип&Дейл
Guest
Добрый день уважаемые знатоки)
Возник такой вопрос как из системной хранимки сделать обычную?
Или какую часть из sp_helprotect вытащить для того чтобы запросом получать разрешения на объекты для роли бд
17 ноя 15, 12:25    [18428604]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Чип&Дейл
Возник такой вопрос как из системной хранимки сделать обычную?

никак

Чип&Дейл
Или какую часть из sp_helprotect вытащить для того чтобы запросом получать разрешения на объекты для роли бд

посмотреть текст процедуры не судьба ?
17 ноя 15, 12:28    [18428629]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
Я все же надеялся что можно как то сделать копию системной обычной хранимкой, смотрел но так и не понял какой из запросов это делает
+
USE [UNGPassing]
GO
/****** Object:  StoredProcedure [sys].[sp_helprotect]    Script Date: 11/17/2015 14:49:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [sys].[sp_helprotect]
	@name				ncharacter varying(776)  = NULL
	,@username			sysname  = NULL
	,@grantorname		sysname  = NULL
	,@permissionarea	character varying(10)  = 'o s'
as

/********
Explanation of the parms...
---------------------------
@name:  Name of [Owner.]Object and Statement; meaning
for sysprotects.id and sysprotects.action at the
same time; thus see parm @permissionarea.
   Examples-   'user2.tb'  , 'CREATE TABLE', null

@username:  Name of the grantee (for sysprotects.uid).
   Examples-   'user2', null

@grantorname:  Name of the grantor (for sysprotects.grantor).
   Examples-   'user2' --Would prevent report rows which would
                       --  have 'dbo' as grantor.

@permissionarea:  O=Object, S=Statement; include all which apply.
   Examples-   'o'  , ',s'  , 'os'  , 'so'  , 's o'  , 's,o'
GeneMi
********/

	set nocount on

	declare
	@vc1                   sysname
	,@Int1                  integer

	declare
	@charMaxLenOwner		character varying(11)
	,@charMaxLenObject		character varying(11)
	,@charMaxLenGrantee		character varying(11)
	,@charMaxLenGrantor		character varying(11)
	,@charMaxLenAction		character varying(11)
	,@charMaxLenColumnName	character varying(11)

	declare
	@OwnerName				sysname
	,@ObjectStatementName	sysname
	,@schid			integer
	,@grantor		integer
	,@grantee		integer

	/* Perform temp table DDL here to minimize compilation costs*/
CREATE TABLE #t1_Prots(
		Id					int			Null
		,Type1Code			char(6)		collate database_default NOT Null
		,ObjType				char(2)		collate database_default Null

		,ActionName			varchar(4)	collate Latin1_General_CI_AS_KS_WS NOT NULL
		,ActionFullName		nvarchar(60)	collate database_default Null
		,ActionCategory		tinyint not null
		,ProtectTypeName	char(10)	collate database_default Null

		,ColId				int			Null

		,OwnerName			sysname		collate database_default NOT Null
		,ObjectName			sysname		collate database_default NOT Null

		,GranteeId			int			NOT Null
		,GrantorId			int			NOT Null
		,GranteeName			sysname		collate database_default NOT Null
		,GrantorName			sysname		collate database_default NOT Null

		,ColumnName			sysname		collate database_default Null
		)


	/*	Check for valid @permissionarea */
	select @permissionarea = upper( isnull(@permissionarea,'?') )

	IF (	 charindex('O',@permissionarea) <= 0
		AND  charindex('S',@permissionarea) <= 0)
	begin
		raiserror(15300,-1,-1 ,@permissionarea,'o,s')
		return (1)
	end

	select @vc1 = parsename(@name,3)

	/* Verified db qualifier is current db*/
	IF (@vc1 is not null and @vc1 <> db_name())
	begin
		raiserror(15302,-1,-1)  --Do not qualify with DB name.
		return (1)
	end

	/*  Derive OwnerName and @ObjectStatementName*/
	select	@OwnerName				=	parsename(@name, 2)
			,@ObjectStatementName	=	parsename(@name, 1)

	IF (@ObjectStatementName is NULL and @name is not null)
	begin
		raiserror(15253,-1,-1,@name)
		return (1)
	end

	if (@OwnerName is not null)
	begin
		select @schid = schema_id(@OwnerName)
		-- assign void schema id if not valid
		if (@schid is null)
			select @schid = 0	
	end

	if (@username is not null)
	begin
		select @grantee = database_principal_id(@username)
		if (@grantee is null)
			select @grantee = -1	-- assign void user id
	end

	if (@grantorname is not null)
	begin
		select @grantor = database_principal_id(@grantorname)
		if (@grantor is null)
			select @grantor = -1	-- assign void user id
	end

	/*	Copy info from sysprotects for processing	*/
	IF charindex('O',@permissionarea) > 0
	begin
		/*	Copy info for objects	*/
		INSERT	#t1_Prots
        (	Id
			,Type1Code

			,ObjType
			,ActionName
			,ActionCategory
			,ProtectTypeName

			,ColId
			,OwnerName
			,ObjectName
			,GranteeId
			,GrantorId
			,GranteeName
			,GrantorName
			,ColumnName)

	/*	1Regul indicates action can be at column level,
		2Simpl indicates action is at the object level */
		select	sysp.major_id
				,case when sysp.type in ('RF','SL','UP') then '1Regul'
					else '2Simpl'
				end

				,obj.type collate database_default
				,sysp.type collate database_default
				,sysp.class
				,sysp.state collate database_default
				,sysp.minor_id
				,schema_name(obj.schema_id)
				,obj.name
				,sysp.grantee_principal_id
				,sysp.grantor_principal_id
				,user_name(sysp.grantee_principal_id)

				,user_name(sysp.grantor_principal_id)
				,'.'
		from	sys.database_permissions sysp
		join sys.all_objects obj on obj.object_id = sysp.major_id
		where sysp.class = 1
		and (@schid is null or obj.schema_id = @schid)
		and	(@ObjectStatementName is null or obj.name = @ObjectStatementName)
		and	(@grantee is null or sysp.grantee_principal_id =  @grantee)
		and	(@grantor is null or sysp.grantor_principal_id = @grantor)

		IF EXISTS (select * from #t1_Prots)
		begin

			-- Indicate entries where column level action pertains to all columns in table
			update #t1_Prots set ColumnName = '(All)'
			where #t1_Prots.ColId = 0 and #t1_Prots.Type1Code = '1Regul'
			and	not exists
				(select * from #t1_Prots col
				where col.Id = #t1_Prots.Id and col.ColId > 0 and
				col.GranteeId = #t1_Prots.GranteeId and col.GrantorId = #t1_Prots.GrantorId and
				col.ActionName = #t1_Prots.ActionName)

			-- Indicates actions pertain to new columns. (i.e. table-level permission)
			-- Views and functions don't get new columns
			update #t1_Prots set ColumnName = case ColumnName when '(All)' then '(All+New)' else '(New)' end
			where ColId = 0 and ObjType = 'U' and Type1Code = '1Regul'

			-- Indicate entries where column level action pertains to only some of columns in table
			update #t1_Prots set ColumnName = col_name(#t1_Prots.Id, #t1_Prots.ColId)
			where #t1_Prots.Type1Code = '1Regul' and #t1_Prots.ColId > 0

			-- Propagate object-level SL/UP/RF permission to columns as appropriate
			insert #t1_Prots (
				Id
				,Type1Code

				,ObjType
				,ActionName
				,ActionCategory
				,ProtectTypeName

				,ColId
				,OwnerName
				,ObjectName
				,GranteeId
				,GrantorId
				,GranteeName
				,GrantorName
				,ColumnName)
			select c.object_id
					,'1Regul'
					,o.type collate database_default
					,p.type collate database_default
					,p.class
					,p.state collate database_default
					,c.column_id
					,schema_name(o.schema_id)
					,o.name
					,p.grantee_principal_id
					,p.grantor_principal_id
					,user_name(p.grantee_principal_id)
					,user_name(p.grantor_principal_id)
					,c.name
			from sys.columns c join sys.database_permissions p on p.class = 1 and p.major_id = c.object_id and p.minor_id = 0 and p.type in ('RF','SL','UP')
				join sys.all_objects o on o.object_id = c.object_id
			where not exists
					(select * from sys.database_permissions m
					where m.class = 1 and m.major_id = p.major_id and m.minor_id = c.column_id
					and m.grantee_principal_id = p.grantee_principal_id and m.grantor_principal_id = p.grantor_principal_id
					and m.type = p.type)
				and exists
					(select * from sys.database_permissions n
					where n.class = 1 and n.major_id = p.major_id and n.minor_id > 0
					and n.grantee_principal_id = p.grantee_principal_id and n.grantor_principal_id = p.grantor_principal_id
					and n.type = p.type)

		end
	end


	/* Handle statement permissions here*/
	IF (charindex('S',@permissionarea) > 0)
	begin
	   /*	All statement permissions are 2Simpl */
		INSERT	#t1_Prots
			 (	Id
				,Type1Code
				,ObjType
				,ActionName

				,ActionCategory
				,ProtectTypeName
				,ColId
				,OwnerName

				,ObjectName
				,GranteeId
				,GrantorId
				,GranteeName
				,GrantorName
				,ColumnName )
		select	0
				,'2Simpl'
				,Null
				,type collate database_default
				,class
				,state collate database_default
				,-123
				,'.'
				,'.'
				,grantee_principal_id
				,grantor_principal_id
				,user_name(grantee_principal_id)
				,user_name(grantor_principal_id)
				,'.'
		from	sys.database_permissions
		where class = 0 and major_id = 0
			and	(@grantee is null or grantee_principal_id =  @grantee)
			and	(@grantor is null or grantor_principal_id = @grantor)
			and	(@ObjectStatementName is null or permission_name = @ObjectStatementName)
			
	end


	IF NOT EXISTS (select * from #t1_Prots)
	begin
		raiserror(15330,-1,-1)
		return (1)
	end

	-- Don't show any Revoke rows (Shiloh compat)
	DELETE #t1_Prots WHERE ProtectTypeName = 'R'
	
	-- Translate ProtectTypeName and ActionFullName to full name, using Shiloh values when possible
	UPDATE #t1_Prots
		SET ProtectTypeName = CASE ProtectTypeName
			WHEN 'G' THEN 'Grant' WHEN 'D' THEN 'Deny' WHEN 'W' THEN 'Grant_WGO' END
		, ActionFullName = ISNULL(
			(SELECT v.name FROM sys.syspalnames v WHERE v.class = 'HPRT' AND v.value = ActionName),
			permission_name(ActionCategory, ActionName) )

	/*	Calculate dynamic display col widths		*/
	select
	@charMaxLenOwner       =
		convert ( varchar, max(datalength(OwnerName)))

	,@charMaxLenObject      =
		convert ( varchar, max(datalength(ObjectName)))

	,@charMaxLenGrantee     =
		convert ( varchar, max(datalength(GranteeName)))

	,@charMaxLenGrantor     =
		convert ( varchar, max(datalength(GrantorName)))

	,@charMaxLenAction      =
		convert ( varchar, max(datalength(ActionFullName)))

	,@charMaxLenColumnName  =
		convert ( varchar, max(datalength(ColumnName)))
	from	#t1_Prots

/*  Output the report	*/
EXECUTE(
'set nocount off

select	''Owner''		= substring (OwnerName   ,1 ,' + @charMaxLenOwner   + ')

		,''Object''		= substring (ObjectName  ,1 ,' + @charMaxLenObject  + ')

		,''Grantee''	= substring (GranteeName ,1 ,' + @charMaxLenGrantee + ')

		,''Grantor''	= substring (GrantorName ,1 ,' + @charMaxLenGrantor + ')

		,''ProtectType''= ProtectTypeName

		,''Action''		= substring (ActionFullName collate database_default,1 ,' + @charMaxLenAction + ')

		,''Column''		= substring (ColumnName ,1 ,' + @charMaxLenColumnName + ')
   from	#t1_Prots
   order by
		ActionCategory desc
		,Owner			,Object
		,Grantee			,Grantor
		,ProtectType		,Action
		,ColId  --Multiple  -123s  ( <0 )  possible

set nocount on'
)

return (0) -- sp_helprotect


Сообщение было отредактировано: 17 ноя 15, 12:52
17 ноя 15, 12:50    [18428748]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Чип&Дейл,
"Я все же надеялся "

а нафига простыню с процедурой сюда вписали?
17 ноя 15, 12:51    [18428752]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Чип&Дейл
Я все же надеялся что можно как то сделать копию системной обычной хранимкой,

Сделать копию и сделать системную процедуру пользовательской - это разные вещи

Чип&Дейл
мотрел но так и не понял какой из запросов это делает

А комментарии не пробовали читать ?
17 ноя 15, 12:52    [18428754]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&ltqk
Guest
Glory,

Не совсем правильно выразился в формулировки вопроса.
17 ноя 15, 13:26    [18428965]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Чип&Дейл,

==> Или какую часть из sp_helprotect вытащить для того чтобы запросом получать разрешения на объекты для роли бд

Да просто собери динамически GRANT на обьект для роли вот и все.

Или оберни системную процедуру в свою.
17 ноя 15, 13:27    [18428970]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
Jaffar,

Как обернуть системную в свою? В своей процедуре вызвать системную и все?
17 ноя 15, 13:44    [18429107]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Чип&Дейл
Как обернуть системную в свою?

Что ?
Чип&Дейл
В своей процедуре вызвать системную и все?

Что вы пытаетесь сотворить ?
17 ноя 15, 13:59    [18429220]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
Glory,

Я хочу получать разрешения для какой-либо роли не из системной процедуры а из пользовательской, мне большего не надо)
Jaffar предложил обернуть системную процедуру в свою, я так понял нужно сделать вызов системной процедуры из своей. Я не правильно понял предложение Jaffara?
17 ноя 15, 14:11    [18429303]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8725
Чип&Дейл, не пойму, зачем Вам давать административные запросы пользователям? Нечего им там делать.
17 ноя 15, 14:17    [18429363]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Чип&Дейл
Я хочу получать разрешения для какой-либо роли не из системной процедуры а из пользовательской, мне большего не надо)

И что вам мешает это сделать ?
17 ноя 15, 14:21    [18429404]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
В том то и дело что это будет не у пользователей)
Это будет у админов в приложении
17 ноя 15, 14:23    [18429423]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8725
Чип&Дейл,
а что в справке?

sp_helprotect
Разрешения
--------------------------------------------------------------------------------
Необходимо быть членом роли public.
17 ноя 15, 14:25    [18429445]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Чип&Дейл
Это будет у админов в приложении

В чем смысл пользовательской процедуры, которая состоит из единственной команды вызова системной процедуры ?
17 ноя 15, 14:26    [18429453]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Чип&Дейл
В том то и дело что это будет не у пользователей)
Это будет у админов в приложении

вменяемый админ будет смотреть все интересующие его разрешения
цивильными путями.
а никак не через sp_helprotect некие огрызыши прав, к-ые вы уже черт знает сколько времени спрашиваете,
как отобразить в вашем приложении
BOL
sp_helprotect does not return information about securables that were introduced in SQL Server 2005. Use sys.database_permissions and fn_builtin_permissions instead.
17 ноя 15, 14:31    [18429510]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
Чтобы админы могли из приложения менять права а не на сервере. Зачем делать двойную работу? Я не знаю, по мне так проще открыть ssms и поставить галочки там где нужно. Есть еще такой момент что сейчас все пользователя приложения коннектятся с правами owner чего тоже не должно быть, для этого теперь сделано 3 роли web, admin, blacklist у каждой свои разрешения и вот admin будет управлять разрешениями не с ssms а из вне. Возможно я что то упустил но вроде бы задачу поставили такую.
17 ноя 15, 14:44    [18429608]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
o-o,

Так Вы мне подскажите цивильные пути)
17 ноя 15, 14:46    [18429621]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Чип&Дейл
Чтобы админы могли из приложения менять права а не на сервере. Зачем делать двойную работу? Я не знаю, по мне так проще открыть ssms и поставить галочки там где нужно. Есть еще такой момент что сейчас все пользователя приложения коннектятся с правами owner чего тоже не должно быть, для этого теперь сделано 3 роли web, admin, blacklist у каждой свои разрешения и вот admin будет управлять разрешениями не с ssms а из вне. Возможно я что то упустил но вроде бы задачу поставили такую.



это теплое и мягкое.
Админы могут установить не какое-то приложение, а SSMS на рабочей станции и менять права (и не только) не на сервере.
С одной стороны.
Ну и даже в вашем приложении почему не использовать имеющуюся процедуру, а не заматывать её в свою?
Получается - лисапед.
17 ноя 15, 14:47    [18429630]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Чип&Дейл
Чтобы админы могли из приложения менять права а не на сервере.

Они смогут менять права только если вызовут вашу пользовательскую процедуру для просмотра списка прав ?
Если они вызовут сразу sp_helprotect, то они не смогут поменять права ?

Чип&Дейл
Зачем делать двойную работу?

По-моему, вы как раз сейчас и занимаетесь созданием двойной работы

Чип&Дейл
Есть еще такой момент что сейчас все пользователя приложения коннектятся с правами owner чего тоже не должно быть, для этого теперь сделано 3 роли web, admin, blacklist у каждой свои разрешения и вот admin будет управлять разрешениями не с ssms а из вне. Возможно я что то упустил но вроде бы задачу поставили такую.

Так и непонятно, зачем для этого заменять системную процедуру на пользовательскую

Сообщение было отредактировано: 17 ноя 15, 14:49
17 ноя 15, 14:49    [18429645]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Чип&Дейл
Чтобы админы могли из приложения менять права а не на сервере

"копать отсюда и до обеда"???
где ж это админы собрались права-то менять, если не на сервере?
вы читаете, что вообще вам пишут?
та процедура -- ископаемый ящер,
она не показывает даже права на схемы.
а система может быть вся построена на этом:
каждой виндовой группе даны права на ее схему и все.
17 ноя 15, 14:51    [18429660]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
o-o
Чип&Дейл
Чтобы админы могли из приложения менять права а не на сервере

"копать отсюда и до обеда"???
где ж это админы собрались права-то менять, если не на сервере?
вы читаете, что вообще вам пишут?
та процедура -- ископаемый ящер,
она не показывает даже права на схемы.
а система может быть вся построена на этом:
каждой виндовой группе даны права на ее схему и все.


тс хочет придумать лизопед
17 ноя 15, 14:54    [18429691]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Чего вы все докопались до человека
- зачем тебе это надо?
- а ты точно уверен что тебе именно ЭТО надо?
- пойди возьми лучше вот ТО, а то ЭТИМ можешь порезаться.....

Надо ему - пусть обернет и пользуется.

А если вдруг порежется - то может смело хаять форум и говорить, что это тут ему такой дрянной совет дали.
Этого мы что-ли все боимся?

Постоянно почти в каждой теме, на какой-нить пустяковый вопрос, вижу советы типа
"да у тебя база говно, выкинь ее на помойку и сделай все нормально, тогда таких вопросов не будет".
Как будто все живут в вакууме и никто никогда чужой говно_код не разгребал так чтобы не потонуть в нем.

Зачем такие советы?!!

(да просто создай процедуру с тем же набором/типами параметров и вызови из нее процедуры ТУ САМУЮ)

Каков вопрос таков и ответ.
Хотел гранату - получи.

Ну а по хорошему нужно вдумчиво посмотреть/почитать про системный вид sys.syspermissions.
17 ноя 15, 14:56    [18429711]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Jaffar
Надо ему - пусть обернет и пользуется.

Так он даже это сделать не может
17 ноя 15, 14:58    [18429727]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Glory
Так и непонятно, зачем для этого заменять системную процедуру на пользовательскую

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

а т.к. никто не знает, что вообще он способен в приложении отобразить,
то никто и помочь не в состоянии
17 ноя 15, 14:58    [18429728]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Jaffar
Чего вы все докопались до человека
- зачем тебе это надо?
- а ты точно уверен что тебе именно ЭТО надо?
- пойди возьми лучше вот ТО, а то ЭТИМ можешь порезаться.....

то и докопались.
что ему уже 100 раз написали, как права пользователя получить.
и 100 тем закрыли, т.к. он сам не в состоянии описать, чего хочет.
вот вместо разведения 101-ой темы пусть подумает и скажет,
чего умеет, чего не умеет, и чего хочет наваять с такими знаниями.
а то собрался писать трактат о движении планет,
наигравшись в бильярд и уверенный, что все знает о движении шариков
Роль БД
Права доступа
Диалоговое окно.
17 ноя 15, 15:03    [18429781]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
Немного предыстории
Есть программист на опыте который написал приложение на C# и linq to sql и базой на sql server, для учета пропусков работников в большой организации, есть я человек который только что закончил университет в глаза не видевший С#, LINQ, и даже не подозревавший о существовании SQL server, соответственно без какого-либо опыта разработки клиент-серверных приложений и вдруг передается данный проект с заданием допилить, чтобы разграничить действия пользователей. Как придумать универсальных механизм? Я душе в чаю, хватило фантазии сделать несколько ролей и приделать форму администрирования.
to Glory
Они смогут менять права только если вызовут вашу пользовательскую процедуру для просмотра списка прав ?
Если они вызовут сразу sp_helprotect, то они не смогут поменять права ?
Надеюсь что смогут результат процедуры будет отображен в gridcontrol DevExpress который позволяет прикрутить chek к определенным полям. Соответственно результат отобразиться в гриде где будет список объектов базы и разрешения будет галочка, где нет значит нет. Добавив/убрав галочку на каком-либо объекте и подтвердив, наверное будет формироваться запрос на изменение и отправляться на сервер.

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

to o-o
вы читаете, что вообще вам пишут?
та процедура -- ископаемый ящер,
она не показывает даже права на схемы.
Представьте себе, читаю.
Покажите правильную, современную процедуру.

to Jaffar
(да просто создай процедуру с тем же набором/типами параметров и вызови из нее процедуры ТУ САМУЮ)
Ну а по хорошему нужно вдумчиво посмотреть/почитать про системный вид sys.syspermissions.
Спасибо, почитаю, попробую разобраться.
To o-o
у меня есть предположение по этому поводу.
выхлоп системных процедур он не смог на форме отобразить в прошлых темах типа:
Диалоговое окно.
видимо, кто-то подсказал не использовать системные,
а свою написать, чтобы выдавала результат в том виде, к-ый он сумеет отобразить.
только товарищ никак не понимает, что ему надо руками код написать, к-ый ему нужен,
а не сменить наименование процедуры, типа она уже не системная, а пользовательская.

а т.к. никто не знает, что вообще он способен в приложении отобразить,
то никто и помочь не в состоянии
А вот и не угадал.
17 ноя 15, 15:38    [18430091]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Чип&Дейл
НА вот и не угадал.

а вот и еще как.
потому что вот это:
Чип&Дейл
Если они вызовут сразу sp_helprotect, то они не смогут поменять права ?
Надеюсь что смогут результат процедуры будет отображен в gridcontrol DevExpress
который позволяет прикрутить chek к определенным полям.
Соответственно результат отобразиться в гриде где будет список объектов базы и разрешения будет галочка,
где нет значит нет. Добавив/убрав галочку на каком-либо объекте и подтвердив,
наверное будет формироваться запрос на изменение и отправляться на сервер.

говорит о том, что вы и в универе ворон считали на лекциях.
"компьютер все может!!!" -- так бабки в деревне думают.
да я хоть сейчас форму в VS сделаю запускаемую,
куда чекбоксов наложу.
и их можно будет чекать, ага.
рядом еще тексты припишу всяческие.
могу вам подарить.
будете чекать.
только ни на каком сервере никаких прав от этого не прибавится.
хоть бы у чекбокса и подписано было SYSADMIN
17 ноя 15, 15:47    [18430147]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
Возможно я не прав, я ведь не отрицаю и не спорю что это будет работать, может это и не правильный подход и скорее всего я буду думать как сделать по другому, это лишь до чего я догадался сам в силу своих небольших знаний в данной сфере. В теме про диалоговое окно никто так и не ответил где и какую dll искать и подключать.
Так что поменьше глумления, вспомните себя как начинали.
17 ноя 15, 16:15    [18430327]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Чип&Дейл
В теме про диалоговое окно никто так и не ответил где и какую dll искать и подключать.

Какую найдете, такую и подключайте. Серверу глубоко безразличен ваш клиентский код.

Чип&Дейл
Так что поменьше глумления, вспомните себя как начинали.

Начинают все таки не написания собственной системы раздачи прав.
Потуги решать интегралы без знания таблицы умножения не вызывают сочуствия.
17 ноя 15, 16:24    [18430370]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
Чип&Дейл
Так что поменьше глумления, вспомните себя как начинали.

Начинают все таки не написания собственной системы раздачи прав.
Потуги решать интегралы без знания таблицы умножения не вызывают сочуствия.[/quot]

С этим не поспоришь, я согласен что нужно хотя бы разобраться как работает платформа, прочитать какие-то умные книжки например Эндрю Троелсен и начать с чего-то банального и простого вывода в обычный грид или консоль и по нарастающей,но дали то что дали и с начальством особо не поспоришь потому что или делать, учиться, осваивать или искать другую работу что особо легко без опыта работы хотя бы год.
17 ноя 15, 16:48    [18430505]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
Чип&Дейл
но дали то что дали и с начальством особо не поспоришь потому что или делать, учиться, осваивать или искать другую работу что особо легко без опыта работы хотя бы год.

Это тоже ваши личные проблемы.
17 ноя 15, 16:51    [18430529]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Чип&Дейл
В теме про диалоговое окно никто так и не ответил где и какую dll искать и подключать.

пойдите в форум по шарпу и там спросите про dll, если есть готовая,
откуда людям в этой теме знать.
а если писать самому, то для начала надо понять,
что выдать права на что-то это GRANT,
а не апдэйт данных в какой-то таблице, к-ую вы собрались засунуть в грид в надежде на редактирование.
и этот GRANT надо в обработчикe события на сервер отсылать.
а "оно само" ничего и никуда не отправит.
17 ноя 15, 16:58    [18430587]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Чип&Дейл
с начальством особо не поспоришь потому что или делать, учиться, осваивать

ну так идите и читайте про обработчики событий (не в этой ветке, в шарп идите)
про права вот почитайте
Authorization and Permissions in SQL Server
GRANT (Transact-SQL)
17 ноя 15, 17:06    [18430638]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
o-o
Чип&Дейл
В теме про диалоговое окно никто так и не ответил где и какую dll искать и подключать.

пойдите в форум по шарпу и там спросите про dll, если есть готовая,
откуда людям в этой теме знать.
а если писать самому, то для начала надо понять,
что выдать права на что-то это GRANT,
а не апдэйт данных в какой-то таблице, к-ую вы собрались засунуть в грид в надежде на редактирование.
и этот GRANT надо в обработчикe события на сервер отсылать.
а "оно само" ничего и никуда не отправит.


Я хоть где-то сказал, что будет использоваться Update? запрос на изменение не подразумевает только update, по крайне мере я не имел ввиду его использование, тут опять же моя не точная формулировка мыслей.
Разве нельзя пройтись циклом по гриду считав название объекта с соответствующего поля и проверить колонку грида (именно колонку, а не простой чекбокса про который Вы говорили) на наличие чека и потом уже собирать GRANT на исполнение?
17 ноя 15, 17:40    [18430879]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
o-o,
А причем здесь обработчики событий?
17 ноя 15, 17:43    [18430903]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Чип&Дейл
А причем здесь обработчики событий?

вы на шарпе или где?
вы гранты раздаете или что?
---
в последний раз:
раздача прав это не редактирование грида.
если вы просто отобразите чьи-то права в гриде,
собрав инфо из ф-ции, представления или процедуры,
ничего вам редактирование этого набора не принесет.
или писать самому обработку чекбоксов или что у вас там,
или искать написанное кем-то.
и это написанное именно гранты отсылает, а не апдэйты
17 ноя 15, 17:53    [18430962]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8725
Чип&Дейл,
зачем изобретать велосипед, есть есть инструмент администрирования сервера и баз - это SSMS.

Мне кажется, что Вы путаете права пользователей в приложении и права доступа к объектам базы данных.
17 ноя 15, 18:13    [18431110]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
сорри что влез
Guest
Чип&Дейл, дорогой, я прям вот ну ооооочень сильно сомневаюсь что задача вообще про серверные скульные права.

при чем тут права на схемы? начали же с того, что _пользователям_программы_написанной_на_c#_ что-то можно делать, а что-то нельзя.

+ в программе же, а не на сервере


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

безопасно в смысле общей безопасности - что никто не украдет, не поломает.

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

заведите тупейшую табличку "доступ на действия в программе" и ставьте там галки.
а на c# или в хранимках проверяйте.

вы ж если серверными правами порешаете, то узнавать о наличии прав как будете? путем падения? выдачей всем прав на мастер?
17 ноя 15, 18:31    [18431232]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
o-o,
В шарпе. Раздаю гранты.

Любое содержимое грида можно представить в виде текста ToString или нет?
К примеру есть такое событие RowCellClick
тогда можно обычным кликом по гриду получить имя объекта
s=e.CellValue.ToString
разве нет?
Проверить колонки на наличие чека и вернуть true/false и вернуть значение, тоже ничего не мешает, верно?
А теперь что мешает в конце цикла сформировать GRANT и подставить в него значения переменных?
17 ноя 15, 18:38    [18431283]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
Чип&Дейл
o-o,
В шарпе. Раздаю гранты.

Любое содержимое грида можно представить в виде текста ToString или нет?
К примеру есть такое событие RowCellClick
тогда можно обычным кликом по гриду получить имя объекта
s=e.CellValue.ToString
разве нет?
Проверить колонки на наличие чека и вернуть true/false и вернуть значение, тоже ничего не мешает, верно?
А теперь что мешает в конце цикла сформировать GRANT и подставить в него значения переменных?

вы это у меня или у себя спрашиваете?
у меня все права давно рОзданы и проблем никаких нет.
что, нашли уже события?
например, RowCellClick?
еще пару постов назад вы удивлялись их существованию
и тому, что надо писать обработчики этих событий, чтобы хоть что-то сделалось
17 ноя 15, 18:43    [18431310]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
вот это поворот
Guest
Чип&Дейл
o-o,
В шарпе. Раздаю гранты.

Любое содержимое грида можно представить в виде текста ToString или нет?
К примеру есть такое событие RowCellClick
тогда можно обычным кликом по гриду получить имя объекта
s=e.CellValue.ToString
разве нет?
Проверить колонки на наличие чека и вернуть true/false и вернуть значение, тоже ничего не мешает, верно?
А теперь что мешает в конце цикла сформировать GRANT и подставить в него значения переменных?

ничего не мешает.
ты все правильно делаешь.
17 ноя 15, 18:48    [18431337]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
Чип&Дейл
Guest
Спасибо за сарказм, возможно это не будет работать и я где-нибудь накосячу но пока нет других идей
17 ноя 15, 18:51    [18431355]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
вот это поворот
Чип&Дейл
o-o,
В шарпе. Раздаю гранты.

Любое содержимое грида можно представить в виде текста ToString или нет?
К примеру есть такое событие RowCellClick
тогда можно обычным кликом по гриду получить имя объекта
s=e.CellValue.ToString
разве нет?
Проверить колонки на наличие чека и вернуть true/false и вернуть значение, тоже ничего не мешает, верно?
А теперь что мешает в конце цикла сформировать GRANT и подставить в него значения переменных?

ничего не мешает.
ты все правильно делаешь.

ну не совсем все.
что идеологию обработки событий понял -- мы всячески поздравляем.
но он же в грид собрался вывалить *уже имеющиеся гранты*,
и тогда на что же он собрался раздавать права?
на то, где уже до него рОздано?
17 ноя 15, 18:53    [18431365]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
апликейшен победа
Guest
o-o
вот это поворот
пропущено...

ничего не мешает.
ты все правильно делаешь.

ну не совсем все.
что идеологию обработки событий понял -- мы всячески поздравляем.
но он же в грид собрался вывалить *уже имеющиеся гранты*,
и тогда на что же он собрался раздавать права?
на то, где уже до него рОздано?

- CONTROL SERVER не роздан! кому CONTROL SERVER?? зеньсина, зеньсина! падходим, берем.
17 ноя 15, 18:59    [18431400]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура  [new]
o-o
Guest
апликейшен победа,
вот-вот, паблику его раздать, и более никаких проблем
Помогите чайнику с DENY, запрет разрешений на объект.
17 ноя 15, 19:12    [18431471]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить