2010-08-10 4 views
1

데이터베이스의 모든 테이블에 대한 액세스 권한이있는 사용자 - SELECT, INSERT, UPDATE, DELETE 및 EXECUTE (ASP 코드 비난 : - P)를 제외하고 1 테이블 예 users.SQL Server 2005에서 1 (이상)을 제외한 모든 테이블에 SELECT, UPDATE, INSERT, DELETE 허용

db_datareaderdb_datawriter을 부여하면 모든 항목에 대한 모든 액세스 권한이 부여되고 users 테이블에 대한 DELETE 권한 제거가 작동하지 않습니다.

60 개가 넘는 테이블이 있으며 SSMS를 사용하여 모든 테이블을 탐색하고이를 수행하는 것보다 빠른 방법을 찾고있었습니다.

어떻게해야합니까?

답변

4

우선 순위를 우선해야하는 사용 권한을 명시 적으로 거부 할 수 있습니다. 구문은 ...

deny delete on dbo.users to username 
+0

그래서 db_datareader와 db_datawriter를 추가 한 다음이 스펙에 대한 권한을 별도로 제외 할 수 있습니다 ic 테이블, 괜찮을거야? –

+0

예. MSDN에서 db_datawriter 고정 데이터베이스 역할은 모든 사용자 테이블의 데이터를 추가, 삭제 또는 변경할 수 있습니다. 따라서 해당 테이블에 대한 사용 권한을 빼는 경우 필요한 설정으로 끝나야합니다. –

0

당신은

declare ctable cursor for 
    select Name from sysobjects where type = 'u' 

declare @Name sysname 
declare @ExecSQL nvarchar(512) 

open ctable 
fetch next FROM ctable into @Name 

while (@@FETCH_STATUS = 0) 
    begin 
     if (@Name <> 'MyTableToExclude') 
     BEGIN 
      SET @ExecSQL = 'grant SELECT on ' + @Name + ' to PUBLIC' 
      EXEC sp_executesql @ExecSQL 

(변수 TABLENAME을받을 수 없어 GRANT) 해키 커서 sp_executesql을 사용할 수 등

 END 
     fetch next FROM ctable into @Name 
    end 
close ctable 
deallocate ctable 

마이너입니다 ... 테이블에 exec를 부여 할 수 없다는 것에주의하십시오.)

관련 문제