<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-br">
		<id>http://wiki.mstech.com.br/index.php?action=history&amp;feed=atom&amp;title=Procedure_de_Grant</id>
		<title>Procedure de Grant - Histórico de revisão</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mstech.com.br/index.php?action=history&amp;feed=atom&amp;title=Procedure_de_Grant"/>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Procedure_de_Grant&amp;action=history"/>
		<updated>2026-05-07T20:25:02Z</updated>
		<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Procedure_de_Grant&amp;diff=2116&amp;oldid=prev</id>
		<title>Daniel.alves em 16h25min de 23 de agosto de 2016</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Procedure_de_Grant&amp;diff=2116&amp;oldid=prev"/>
				<updated>2016-08-23T16:25:37Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='pt-BR'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Edição anterior&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Edição das 16h25min de 23 de agosto de 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Linha 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linha 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A '''procedure''' de Grant permite que aos usuários com permissão apenas de Leitura e Escrita a execução de itens que requerem elevação de permissão.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A '''procedure''' de Grant permite que aos usuários com permissão apenas de Leitura e Escrita a execução de itens que requerem elevação de permissão.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;quot; line=&amp;quot;1&lt;/del&gt;&amp;quot; &amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;USE [msdb]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;USE [msdb]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;GO&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;GO&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Daniel.alves</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Procedure_de_Grant&amp;diff=1724&amp;oldid=prev</id>
		<title>Daniel.alves: Criou página com 'A '''procedure''' de Grant permite que aos usuários com permissão apenas de Leitura e Escrita a execução de itens que requerem elevação de permissão.  &lt;syntaxhighlight...'</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Procedure_de_Grant&amp;diff=1724&amp;oldid=prev"/>
				<updated>2016-08-04T14:52:56Z</updated>
		
		<summary type="html">&lt;p&gt;Criou página com &amp;#039;A &amp;#039;&amp;#039;&amp;#039;procedure&amp;#039;&amp;#039;&amp;#039; de Grant permite que aos usuários com permissão apenas de Leitura e Escrita a execução de itens que requerem elevação de permissão.  &amp;lt;syntaxhighlight...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;A '''procedure''' de Grant permite que aos usuários com permissão apenas de Leitura e Escrita a execução de itens que requerem elevação de permissão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
USE [msdb]&lt;br /&gt;
GO&lt;br /&gt;
&lt;br /&gt;
/****** Object:  StoredProcedure [dbo].[spGrantExectoAllRoutines]    Script Date: 03/21/2014 16:34:10 ******/&lt;br /&gt;
SET ANSI_NULLS ON&lt;br /&gt;
GO&lt;br /&gt;
SET QUOTED_IDENTIFIER ON&lt;br /&gt;
GO&lt;br /&gt;
-- ===============================================================================&lt;br /&gt;
-- Author:  Bruno Valle&lt;br /&gt;
-- Create date: 24/02/2011&lt;br /&gt;
-- Description: Adiciona Grant para usuário conforme banco de dados passado.&lt;br /&gt;
-- Os grants são estes: &lt;br /&gt;
-- 1 - Stored Procedure: GRANT EXEC&lt;br /&gt;
-- 2 - Functions:&lt;br /&gt;
--  2.1 - Table-valued Functions: GRANT SELECT&lt;br /&gt;
--  2.2 - Scalar-valued Functions: GRANT EXEC  &lt;br /&gt;
--  2.3 - Type: GRANT CONTROL&lt;br /&gt;
-- Recomendação: &lt;br /&gt;
-- Criar o usuário do banco dados conforme o exemplo&lt;br /&gt;
-- USE [master]&lt;br /&gt;
-- GO&lt;br /&gt;
-- CREATE LOGIN [user_testepermissao] WITH PASSWORD=N'123456', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF&lt;br /&gt;
-- GO&lt;br /&gt;
-- USE [GestaoEscolar]&lt;br /&gt;
-- GO&lt;br /&gt;
-- CREATE USER [user_testepermissao] FOR LOGIN [user_testepermissao]&lt;br /&gt;
-- GO&lt;br /&gt;
-- USE [GestaoEscolar]&lt;br /&gt;
-- GO&lt;br /&gt;
-- EXEC sp_addrolemember N'db_datawriter', N'user_testepermissao'&lt;br /&gt;
-- GO &lt;br /&gt;
-- USE [GestaoEscolar]&lt;br /&gt;
-- GO&lt;br /&gt;
-- EXEC sp_addrolemember N'db_datareader', N'user_testepermissao'&lt;br /&gt;
-- GO &lt;br /&gt;
-- Observação: É validado se é passado um usuário ou banco de dados válido&lt;br /&gt;
-- Baseado neste artigo:&lt;br /&gt;
-- http://www.mssqltips.com/tip.asp?tip=1203&lt;br /&gt;
-- ===============================================================================&lt;br /&gt;
CREATE PROCEDURE [dbo].[spGrantExectoAllRoutines]&lt;br /&gt;
 @user sysname&lt;br /&gt;
 , @database sysname&lt;br /&gt;
WITH EXECUTE AS OWNER &lt;br /&gt;
AS&lt;br /&gt;
BEGIN&lt;br /&gt;
 SET NOCOUNT ON&lt;br /&gt;
 DECLARE &lt;br /&gt;
  @CMDUSE VARCHAR(128)&lt;br /&gt;
  , @CMD1 VARCHAR(8000)&lt;br /&gt;
  , @MAXOID INT&lt;br /&gt;
 DECLARE &lt;br /&gt;
  @InfoSchemaType int&lt;br /&gt;
  , @OwnerName VARCHAR(128)&lt;br /&gt;
  , @ObjectName VARCHAR(128)&lt;br /&gt;
  , @ObjectType VARCHAR(128)&lt;br /&gt;
  , @ObjectDataType VARCHAR(128)&lt;br /&gt;
    &lt;br /&gt;
 DECLARE @auxCount INT = 0&lt;br /&gt;
 DECLARE @auxCount2 INT = 0&lt;br /&gt;
 SELECT  @user = RTRIM(LTRIM(@user))&lt;br /&gt;
 SELECT  @auxCount = LEN(@user)&lt;br /&gt;
 IF (@database IS NOT NULL&lt;br /&gt;
  AND EXISTS ( SELECT *&lt;br /&gt;
      FROM   sys.databases&lt;br /&gt;
      WHERE  NAME = @database )&lt;br /&gt;
  AND @user IS NOT NULL&lt;br /&gt;
  AND @auxCount &amp;gt; 0&lt;br /&gt;
    ) &lt;br /&gt;
 BEGIN &lt;br /&gt;
  DECLARE @sql NVARCHAR(MAX) = 'SELECT @auxCount2 = COUNT(*) FROM ['+ @database + '].sys.sysusers WHERE NAME = @user '&lt;br /&gt;
  EXEC sp_executesql @sql,N'@user sysname, @auxCount2 int OUTPUT',@user,@auxCount2 OUTPUT &lt;br /&gt;
   &lt;br /&gt;
  IF (@auxCount2 &amp;gt; 0) &lt;br /&gt;
  BEGIN&lt;br /&gt;
   CREATE TABLE #TempAllRoutines&lt;br /&gt;
     (    &lt;br /&gt;
      OID INT IDENTITY(1,1),&lt;br /&gt;
      InfoSchemaType int NOT NULL,&lt;br /&gt;
      OwnerName VARCHAR(128) NOT NULL,&lt;br /&gt;
      ObjectName VARCHAR(128) NOT NULL,&lt;br /&gt;
      ObjectType VARCHAR(128) NOT NULL,&lt;br /&gt;
      ObjectDataType VARCHAR(128) NULL,&lt;br /&gt;
      ObjectSpecific_Catalog VARCHAR(128) NULL&lt;br /&gt;
     )&lt;br /&gt;
   EXEC&lt;br /&gt;
     ('INSERT INTO #TempAllRoutines (InfoSchemaType, OwnerName, ObjectName,ObjectType,ObjectDataType,ObjectSpecific_Catalog)&lt;br /&gt;
    SELECT 1, ROUTINE_SCHEMA, ROUTINE_NAME,ROUTINE_TYPE,DATA_TYPE,SPECIFIC_CATALOG &lt;br /&gt;
    FROM [' &lt;br /&gt;
    + @database + '].INFORMATION_SCHEMA.ROUTINES &lt;br /&gt;
    WHERE &lt;br /&gt;
    ROUTINE_NAME NOT LIKE ''dt_%''&lt;br /&gt;
    AND &lt;br /&gt;
    Specific_Name NOT IN ( ''sp_alterdiagram'',&lt;br /&gt;
     ''sp_creatediagram'',&lt;br /&gt;
     ''sp_dropdiagram'',&lt;br /&gt;
     ''sp_helpdiagramdefinition'',&lt;br /&gt;
     ''sp_helpdiagrams'',&lt;br /&gt;
     ''sp_renamediagram'',&lt;br /&gt;
     ''sp_upgraddiagrams'',&lt;br /&gt;
     ''fn_diagramobjects'')&lt;br /&gt;
    UNION &lt;br /&gt;
    SELECT 2, DOMAIN_SCHEMA, DOMAIN_NAME, DATA_TYPE, null, null&lt;br /&gt;
    FROM ['+ @database + '].INFORMATION_SCHEMA.DOMAINS'&lt;br /&gt;
     )&lt;br /&gt;
   -- 4 - Capture the @MAXOID value&lt;br /&gt;
   SELECT    @MAXOID = MAX(OID)&lt;br /&gt;
   FROM      #TempAllRoutines&lt;br /&gt;
   --SELECT * FROM #TempAllRoutines&lt;br /&gt;
   SET @CMDUSE = 'USE [' + @database + '];' &lt;br /&gt;
   -- 5 - WHILE loop&lt;br /&gt;
   WHILE (@MAXOID &amp;gt; 0)&lt;br /&gt;
   BEGIN&lt;br /&gt;
    -- 6 - Initialize the variables&lt;br /&gt;
    SELECT  &lt;br /&gt;
     @InfoSchemaType = InfoSchemaType,  &lt;br /&gt;
     @OwnerName = OwnerName,&lt;br /&gt;
     @ObjectName = ObjectName,&lt;br /&gt;
     @ObjectType = ObjectType,&lt;br /&gt;
     @ObjectDataType = ObjectDataType&lt;br /&gt;
    FROM      &lt;br /&gt;
     #TempAllRoutines&lt;br /&gt;
    WHERE     &lt;br /&gt;
     OID = @MAXOID&lt;br /&gt;
    -- 7 - Build the string &lt;br /&gt;
    IF (@InfoSchemaType = 1)&lt;br /&gt;
     SELECT   &lt;br /&gt;
      @CMD1 = ' GRANT '&lt;br /&gt;
      + CASE &lt;br /&gt;
       WHEN (@ObjectType = 'FUNCTION' AND @ObjectDataType = 'TABLE') &lt;br /&gt;
       THEN 'SELECT ' &lt;br /&gt;
       ELSE 'EXEC ' END &lt;br /&gt;
      + ' ON ' + '[' + @OwnerName&lt;br /&gt;
      + ']' + '.' + '[' + @ObjectName + ']'&lt;br /&gt;
      + ' TO [' + @user + ']'&lt;br /&gt;
    ELSE IF (@InfoSchemaType = 2)&lt;br /&gt;
     SELECT   &lt;br /&gt;
      @CMD1 = ' GRANT CONTROL ON TYPE::[' + @OwnerName&lt;br /&gt;
      + '].[' + @ObjectName + '] TO [' + @user + ']'&lt;br /&gt;
      &lt;br /&gt;
    PRINT CAST(@MAXOID AS VARCHAR) + ' - ' + @CMD1&lt;br /&gt;
    -- 8 - Execute the string &lt;br /&gt;
    EXEC (@CMDUSE + @CMD1)&lt;br /&gt;
    -- 9 - Decrement @MAXOID&lt;br /&gt;
    SET @MAXOID = @MAXOID - 1&lt;br /&gt;
   END&lt;br /&gt;
   -- 10 - Drop the temporary table&lt;br /&gt;
   DROP TABLE #TempAllRoutines&lt;br /&gt;
  END &lt;br /&gt;
  ELSE &lt;br /&gt;
  BEGIN &lt;br /&gt;
     PRINT 'O usuário ' + @user + ' não existe no banco de dados '+ @database + '!'&lt;br /&gt;
  END&lt;br /&gt;
 END &lt;br /&gt;
 ELSE &lt;br /&gt;
 BEGIN&lt;br /&gt;
  PRINT 'Banco de Dados ou usuário inválido!'&lt;br /&gt;
 END&lt;br /&gt;
END&lt;br /&gt;
GO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel.alves</name></author>	</entry>

	</feed>