Ik probeer een combinatie van rechten te bedenken waarmee een partner de basis kan zien db-schema maar laat geen objecten zien inclusief code. Dus,
- VIEW en SELECTEER op TABELLEN (inclusief sleutels)
- Voorkom / WEIGER op weergaven, opgeslagen processen, functies.
Ik heb erover nagedacht om door te gaan en individuele objecten te ontkennen, maar dit zal geen enkele nieuw gemaakte beschermen.
Extra aandacht – ik moet dit naar werken in SQL Azure.
Answer
U kunt een rol maken en deze vervolgens machtigingen verlenen / intrekken. Elke gebruiker die dat is een deel van de rol zal de rechten overnemen.
Hieronder staat een voorbeeld om u op weg te helpen:
-- 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
Antwoord
Ik denk dat je misschien gewoon een toegestane lijst met objecten nodig hebt. Dit kan worden gedaan in een script zoals hieronder of in de gedefinieerde Ro le zoals beschreven door Kin. Hieronder ziet u een voorbeeld van het toekennen van rechten aan een gebruiker met behulp van een tabelvariabele die de lijst met toegestane objecten definieert.
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
Antwoord
Uiteindelijk heb ik datareader en datawriter rollen gebruikt om toegang te geven tot de data. Verleen dan VIEW DEFINITION met de onderstaande proc. Moet onthouden om dit te onderhouden …
Allemaal bedankt.
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"
Reacties
- Ik zou willen voorstellen de auteur van de code te vermelden: mssqltips.com/sqlservertip/1593/…