제가 직접 작성한 건 아니지만...

의외로 이거 쓸 데 많습니다.

 

권한 분리할 때 꼭 필요한 부분이라서요...

 

단, 실제 사용자에 따라 달리 줘야 하는 경우가 있으니 주의하시기 바랍니다.

 

SQL Server 2000

 

-- SELECT @CMD1 = 'GRANT EXEC ON ' + '[' + @OwnerName + ']' + '.' + '[' + @ObjectName + ']' + ' TO [' + @user +']'

CREATE PROCEDURE spGrantExectoAllStoredProcs @user sysname

AS

 

/*----------------------------------------------------------------------------

-- Object Name: spGrantExectoAllStoredProcs

-- Author: Edgewood Solutions

-- Development Date: 03.19.2007

-- Called By: TBD

-- Description: Issue GRANT EXEC statement for all stored procedures

-- based on the user name that is passed in to this stored procedure

-- Project: SQL Server Security

-- Database: User defined databases

-- Business Process: SQL Server Security

--

----------------------------------------------------------------------------

-- Num | CRF ID | Date Modified | Developer | Description

----------------------------------------------------------------------------

-- 001  | N\A     | 03.15.2007    | Edgewood | Original code for the GRANT

-- EXEC process

--

--

*/

SET NOCOUNT ON

 

-- 1 - Variable declarations

DECLARE @CMD1 varchar(8000)

DECLARE @MAXOID int

DECLARE @OwnerName varchar(128)

DECLARE @ObjectName varchar(128)

 

-- 2 - Create temporary table

CREATE TABLE #StoredProcedures

(OID int IDENTITY (1,1),

StoredProcOwner varchar(128) NOT NULL,

StoredProcName varchar(128) NOT NULL)

 

-- 3 - Populate temporary table

INSERT INTO #StoredProcedures (StoredProcOwner, StoredProcName)

SELECT u.[Name], o.[Name]

FROM dbo.sysobjects o

INNER JOIN dbo.sysusers u

ON o.uid = u.uid

WHERE o.Type = 'P'

AND o.[Name] NOT LIKE 'dt_%'

 

-- 4 - Capture the @MAXOID value

SELECT @MAXOID = MAX(OID) FROM #StoredProcedures

 

-- 5 - WHILE loop

WHILE @MAXOID > 0

BEGIN

 

-- 6 - Initialize the variables

SELECT @OwnerName = StoredProcOwner,

@ObjectName = StoredProcName

FROM #StoredProcedures

WHERE OID = @MAXOID

 

-- 7 - Build the string

SELECT @CMD1 = 'GRANT EXEC ON ' + '[' + @OwnerName + ']' + '.' + '[' + @ObjectName + ']' + ' TO ' + @user

 

-- 8 - Execute the string

-- SELECT @CMD1

EXEC(@CMD1)

 

-- 9 - Decrement @MAXOID

SET @MAXOID = @MAXOID - 1

END

 

-- 10 - Drop the temporary table

DROP TABLE #StoredProcedures

 

SET NOCOUNT OFF

GO

 

 

SQL Server 2005 이상

 

CREATE PROCEDURE spGrantExectoAllStoredProcs @user sysname

AS

/*----------------------------------------------------------------------------

-- Object Name: spGrantExectoAllStoredProcs

-- Author: Edgewood Solutions

-- Development Date: 03.19.2007

-- Called By: TBD

-- Description: Issue GRANT EXEC statement for all stored procedures

-- based on the user name that is passed in to this stored procedure

-- Project: SQL Server Security

-- Database: User defined databases

-- Business Process: SQL Server Security

--

----------------------------------------------------------------------------

-- Num | CRF ID | Date Modified | Developer | Description

----------------------------------------------------------------------------

-- 001 | N\A      | 03.15.2007    | Edgewood | Original code for the GRANT

-- EXEC process

--

--

*/

 

SET NOCOUNT ON

 

-- 1 - Variable declarations

DECLARE @CMD1 varchar(8000)

DECLARE @MAXOID int

DECLARE @OwnerName varchar(128)

DECLARE @ObjectName varchar(128)

 

-- 2 - Create temporary table

CREATE TABLE #StoredProcedures

(OID int IDENTITY (1,1),

StoredProcOwner varchar(128) NOT NULL,

StoredProcName varchar(128) NOT NULL)

 

-- 3 - Populate temporary table

INSERT INTO #StoredProcedures (StoredProcOwner, StoredProcName)

SELECT ROUTINE_SCHEMA, ROUTINE_NAME

FROM INFORMATION_SCHEMA.ROUTINES

WHERE ROUTINE_NAME NOT LIKE 'dt_%'

AND ROUTINE_TYPE = 'PROCEDURE'

 

-- 4 - Capture the @MAXOID value

SELECT @MAXOID = MAX(OID) FROM #StoredProcedures

 

-- 5 - WHILE loop

WHILE @MAXOID > 0

BEGIN

 

-- 6 - Initialize the variables

SELECT @OwnerName = StoredProcOwner,

@ObjectName = StoredProcName

FROM #StoredProcedures

WHERE OID = @MAXOID

 

-- 7 - Build the string

SELECT @CMD1 = 'GRANT EXEC ON ' + '[' + @OwnerName + ']' + '.' + '[' + @ObjectName + ']' + ' TO ' + @user

 

-- 8 - Execute the string

-- SELECT @CMD1

EXEC(@CMD1)

 

-- 9 - Decrement @MAXOID

SET @MAXOID = @MAXOID - 1

END

 

-- 10 - Drop the temporary table

DROP TABLE #StoredProcedures

 

SET NOCOUNT OFF

GO

 

 

+ Recent posts