Jag är väldigt grön när det gäller databasbehörighetens hantering i SQL Sever.
Låt oss hålla ett exempel enkelt.
Säg att kontot ”admin” är ägaren till scheman A, B och C.
Det finns ett annat konto ”minion” som du vill ha fullständiga rättigheter (uppdatera / radera / infoga / välj / ändra) på något objekt (tabell / vy) som skapats under scheman A, B och C.
Är det möjligt? Eller måste du utföra ett bidragsdeklaration varje gång du lägger till en tabell / vy under dessa scheman? (verkar lite dumt för mig).
Svar
Du kan GRANT
schematillstånd som är effektiva för allt existerande och allt som kommer att finnas i det schemat.
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;
Ytterligare till detta, om du vill avvisa behörigheter för en viss objekt inom det schemat kan du göra.
DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
Kommentarer
Svar
För att förenkla lite längre kan du använda roller för att utföra det jobb du letar efter.
När du har tilldelat behörigheter till rollen kan du bara lägga till användare i rollen. På så sätt behöver du inte hantera behörigheter för enskilda användare. Användarna ärver behörigheter som beviljas roll.
Nedan följer ett exempel för att komma igång:
-- Create the database role CREATE ROLE TableSelector AUTHORIZATION [dbo] GO ---- Grant access rights to a specific schema in the database GRANT SELECT, INSERT, UPDATE, DELETE, ALTER 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
.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]