파트너가 기본을 볼 수 있도록 허용하는 권한 조합을 파악하려고합니다. db 스키마이지만 코드를 포함한 객체를 노출하지 않습니다. 따라서

  1. VIEW 및 SELECT on TABLES (키 포함)
  2. 뷰, 저장된 Procs, 함수에 대한 방지 / 거부

      li>

    개별 개체를 처리하고 거부하는 것을 고려했지만 새로 생성 된 개체를 보호하지는 못합니다.

    추가 고려 사항-이 문제를 해결해야합니다. SQL Azure에서 작동합니다.

답변

역할을 만든 다음 권한을 부여 / 해지 할 수 있습니다. 역할의 일부는 권한을 상속합니다.

다음은 시작하는 예입니다.

 -- Create the database role CREATE ROLE TableSelector AUTHORIZATION [dbo] GO ---- Grant access rights to a specific schema in the databas GRANT SELECT ON SCHEMA::dbo TO TableSelector GO -- Add an existing user to the new role created EXEC sp_addrolemember "TableSelector", "MyDBUser" GO -- Revoke access rights on a schema from a role DENY ALTER -- you can customize here ... ON SCHEMA::dbo TO TableSelector 

답변

허용 된 개체 목록이 필요한 것 같습니다. 아래 스크립트 또는 Ro 정의에서 수행 할 수 있습니다. Kin에 의해 설명 된 le. 다음은 허용 된 개체 목록을 정의하는 테이블 변수를 사용하여 사용자에게 권한을 부여하는 예입니다.

DECLARE @AllowedObjects AS TABLE( name SYSNAME ) INSERT INTO @AllowedObjects SELECT N"dbo.Table1" UNION SELECT N"dbo.Table2" DECLARE @name SYSNAME DECLARE names CURSOR FOR SELECT name FROM @AllowedObjects OPEN names FETCH NEXT FROM names INTO @name WHILE(@@FETCH_STATUS <> -1) BEGIN IF (@@FETCH_STATUS <> -2) BEGIN EXEC ("GRANT SELECT ON OBJECT::" + @name + " TO userName") END FETCH NEXT FROM names INTO @name END CLOSE names DEALLOCATE names 

Answer

결국 데이터에 대한 액세스 권한을 부여하기 위해 datareader 및 datawriter 역할을 사용했습니다. 그런 다음 아래 proc로 VIEW DEFINITION을 부여했습니다. 이것을 유지하는 것을 기억해야합니다 …

모두 감사합니다.

Create PROCEDURE GrantViewDefinitionOnTables (@login VARCHAR(30)) AS begin /* Included Object Types are: P - Stored Procedure V - View FN - SQL scalar-function TR - Trigger IF - SQL inlined table-valued function TF - SQL table-valued function U - Table (user-defined) */ SET NOCOUNT ON CREATE TABLE #runSQL (runSQL VARCHAR(2000) NOT NULL) --Declare @execSQL varchar(2000), @login varchar(30), @space char (1), @TO char (2) DECLARE @execSQL VARCHAR(2000), @space CHAR (1), @TO CHAR (2) SET @to = "TO" SET @execSQL = "Grant View Definition ON " SET @login = REPLACE(REPLACE (@login, "[", ""), "]", "") SET @login = "[" + @login + "]" SET @space = " " INSERT INTO #runSQL SELECT @execSQL + schema_name(schema_id) + "." + [name] + @space + @TO + @space + @login FROM sys.all_objects s -- Want the view permission to sp, view, trigger then add type code mention in above. eg: where type IN("P","V","FN",TR","IF","TF","U") WHERE type IN ("U") AND is_ms_shipped = 0 ORDER BY s.type, s.name SET @execSQL = "" Execute_SQL: SET ROWCOUNT 1 SELECT @execSQL = runSQL FROM #runSQL PRINT @execSQL --Comment out if you don"t want to see the output EXEC (@execSQL) DELETE FROM #runSQL WHERE runSQL = @execSQL IF EXISTS (SELECT * FROM #runSQL) GOTO Execute_SQL SET ROWCOUNT 0 DROP TABLE #runSQL end ------------------------ EXEC GrantViewDefinitionOnTables "MyDatabase" 

댓글

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다