I “próbálok kitalálni olyan engedélyek kombinációját, amelyek lehetővé teszik a partner számára az alapvető db séma, de ne tegye ki az objektumokat, beleértve a kódot is. Tehát,
- MEGTEKINTÉS és KIVÁLASZTÁS A TÁBLÁZATOKON (beleértve a kulcsokat is)
- Prevent / DENY on Views, Stored Procs, Functions. li>
Azon gondolkodtam, hogy átnézem-e és megtagadom-e az egyes objektumokat, de ez nem fogja megvédeni az újonnan létrehozottakat.
Megfontolásra érdemes – ezt el kell érnem dolgozzon az SQL Azure-ban.
Válasz
Létrehozhat egy szerepet, majd engedélyeket adhat neki / visszavonhat. Bármely felhasználó, A szerepkör egy része örökli az engedélyeket.
Az alábbiakban bemutatunk egy példát a kezdéshez:
-- 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
Válasz
Azt hiszem, talán csak szükséged van egy engedélyezett objektumlistára. Ez megtehető egy szkriptben, az alábbiak szerint, vagy a definiált Ro-ban le a Kin. Az alábbiakban bemutatunk példákat arra, hogyan adhatunk jogokat egy felhasználónak egy táblázatváltozó segítségével, amely meghatározza az engedélyezett objektumok listáját.
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
Válasz
Végül datareader és datawerer szerepeket használtam az adatokhoz való hozzáférés megadásához. Ezután megadta a NÉZET MEGHATÁROZÁSÁT az alábbi proc. Emlékeznie kell ennek fenntartására …
Köszönöm mindenkinek.
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"
Hozzászólások
- Javaslom a kód szerzőjének jóváírását: mssqltips.com/sqlservertip/1593/…