최선의 방법은 무엇일을 구현하는 SQL 스크립트는 권한을 부여 데이터베이스 역할에 모든 사용자 데이터베이스의 테이블?

StackOverflow https://stackoverflow.com/questions/44780

문제

최선의 방법은 무엇일을 구현하는 SQL 스크립트를 부여하는 선택을 참조,insert,update,delete 권한을 데이터베이스 역할에 모든 사용자 데이터베이스의 테이블?

이 스크립트를 실행할 수 있습 여러 번으로 새로운 테이블에 데이터베이스에 추가되었는데.SQL 서버 관리 스튜디오는 스크립트를 생성합에 대한 개인 데이터베이스의 개체,그러나 내가 찾는 것이 더"화재 및 잊지"스크립트입니다.

도움이 되었습니까?

해결책

박사 짐머만이 올바르게 매치된 상태는 여기에.내가 수고를 쓰고 저장 프로시저는 커서를 반복을 통해 사용자 객체를 사용하여 실행하 즉각적인 영향을 미치는 보조금을 신청할 수 있습니다.무언가 이것을 좋아한다:

 IF EXISTS (
    SELECT 1 FROM sysobjects
    WHERE name = 'sp_grantastic'
    AND type = 'P'
)
DROP PROCEDURE sp_grantastic
GO
CREATE PROCEDURE sp_grantastic
AS
DECLARE
 @object_name VARCHAR(30)
,@time       VARCHAR(8)
,@rights     VARCHAR(20)
,@role       VARCHAR(20)

DECLARE c_objects CURSOR FOR
    SELECT  name
    FROM    sysobjects
    WHERE   type IN ('P', 'U', 'V')
    FOR READ ONLY

BEGIN

    SELECT  @rights = 'ALL'
           ,@role = 'PUBLIC'

    OPEN c_objects
    WHILE (1=1)
    BEGIN
        FETCH c_objects INTO @object_name
        IF @@SQLSTATUS <> 0 BREAK

        SELECT @time = CONVERT(VARCHAR, GetDate(), 108)
        PRINT '[%1!] hitting up object %2!', @time, @object_name
        EXECUTE('GRANT '+ @rights +' ON '+ @object_name+' TO '+@role)

    END

    PRINT '[%1!] fin!', @time

    CLOSE c_objects
    DEALLOCATE CURSOR c_objects
END
GO
GRANT ALL ON sp_grantastic TO PUBLIC
GO

할 수 있습니다 다음 화재 및 잊:

EXEC sp_grantastic

다른 팁

나는 확신이 있는 쉬운 방법이지만을 반복할 수 있습 시스템 개체의 이름은 테이블에서 데이터베이스 및 사용 권한을 부여 어떤 테이블의 사용자는 개체를 존재합니다.할 수 있음 실행될 때마다 여러 번 새로운 테이블에 추가됩니다.

가 언급되지 않음 MS 라는 절차 sp_MSforeachtable 사용할 수 있는 확실히 2000 년 및 2005.

을 부여하는 권한을 선택 사용 될 것이다:

EXECUTE sp_MSforeachtable @command1=' Grant Select on ? to RoleName'

을 부여하는 다른 권한을 가지고 있거나 새로운 문의 각 하나 추가하기만 하면 다음과 같은 명령을 입력하십시오:

EXECUTE sp_MSforeachtable @command1=' Grant Select on ? to RoleName; Grant Delete on ? to RoleName;'

의 비트와 함께 주변에 재생할 수 있습을 설정하는 역할 이름으로 매개변수뿐만 아니라.

우리가 사용하는 유사한 무언가가치가 작동합니다.루프를 통해 모든 테이블,뷰 저장된 절차의 시스템입니다.

CREATE PROCEDURE dbo.SP_GrantFullAccess 
    @username varchar(300)
AS

DECLARE @on varchar(300) 
DECLARE @count int
SET @count = 0

PRINT 'Granting access to user ' + @username + ' on the following objects:'

DECLARE c CURSOR FOR 
SELECT name FROM sysobjects WHERE type IN('U', 'V', 'SP', 'P') ORDER BY name
OPEN c 
FETCH NEXT FROM c INTO @on 
WHILE @@FETCH_STATUS = 0 
BEGIN 
 SET @count = @count + 1
 EXEC('GRANT ALL ON [' + @on + '] TO [' + @username + ']') 
 --PRINT 'GRANT ALL ON [' + @on + '] TO ' + @username
 PRINT @on
 FETCH NEXT FROM c INTO @on 
END 
CLOSE c 
DEALLOCATE c

PRINT 'Granted access to ' + cast(@count as varchar(4)) + ' object(s).'
GO
use [YourDb]
GO
exec sp_MSforeachtable @command1=
    "GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE ON ? TO Admins, Mgmt",
    @whereand = " and o.name like 'tbl_%'"
GO

use [YourDb]
GO
exec sp_MSforeachtable @command1=
    "GRANT REFERENCES, SELECT ON ? TO Employee, public",
    @whereand = " and o.name like 'tbl_%'"
GO
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top