fix script from tcartwright@thesystemshop.com (http://www.sqlservercentral.com/scripts/scriptdetails.asp?scriptid=600) for no dbo users
2007-10-02 (first published: 2002-06-20)
15,451 reads
fix script from tcartwright@thesystemshop.com (http://www.sqlservercentral.com/scripts/scriptdetails.asp?scriptid=600) for no dbo users
SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spSetPermissionsGlobally]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[spSetPermissionsGlobally] GO CREATE PROCEDURE spSetPermissionsGlobally(@name nvarchar(128) = 'public', @printonly bit = 1, @revokeOldRights as bit = 1, @processViews bit = 1, @processProcs bit = 1, @processTables bit = 0) AS SET NOCOUNT ON DECLARE permissions_cursor CURSOR FOR SELECT u.[name] + '.' + s.[name], s.xtype FROM sysobjects s, sysusers u WHERE ((OBJECTPROPERTY(s.id, N'IsView') = 1 AND @processViews = 1) -- <--Stored Procs, Tables, and Views, OH MY! OR (OBJECTPROPERTY(s.id, N'IsProcedure') = 1 AND @processProcs = 1) OR (OBJECTPROPERTY(s.id, N'IsTable') = 1 AND @processTables = 1)) AND OBJECTPROPERTY(s.id, N'IsMSShipped') = 0 -- <--ask for any object that did not come with SQL Server AND s.[name] <> 'spSetPermissionsGlobally' AND s.uid = u.uid ORDER BY s.xtype, s.[name] -- <--makes it run slower, but easier to find items in the QA output window(of course there is CTRL+F :P ) DECLARE @objname nvarchar(128), @type char(1), @sql varchar(200), @sqlrevoke varchar(200) OPEN permissions_cursor FETCH NEXT FROM permissions_cursor INTO @objname, @type WHILE @@FETCH_STATUS = 0 BEGIN IF(LOWER(@objname) <> LOWER('spSetPermissionsGlobally')) BEGIN IF(@type = 'V') -- VIEW SET @sql = 'GRANT SELECT ON ' + @objname + ' TO ' + @name IF(@type = 'P') -- STORED PROC SET @sql = 'GRANT EXECUTE ON ' + @objname + ' TO ' + @name IF(@type = 'U') -- TABLE SET @sql = 'GRANT SELECT, UPDATE, INSERT, DELETE ON ' + @objname + ' TO ' + @name SET @sqlrevoke = 'REVOKE ALL ON ' + @objname + ' TO ' + @name IF @printonly = 0 PRINT '--*****Setting permissions for : ' + @objname + '*****' ELSE PRINT 'PRINT ''*****Setting permissions for : ' + @objname + '*****''' IF(@revokeOldRights = 1) --revoke the old rights? BEGIN PRINT @sqlrevoke IF @printonly = 0 EXEC (@sqlrevoke) ELSE PRINT 'GO' END PRINT @sql IF @printonly = 0 EXEC (@sql) ELSE PRINT 'GO' PRINT '' END FETCH NEXT FROM permissions_cursor INTO @objname, @type END CLOSE permissions_cursor DEALLOCATE permissions_cursor GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO