Databaser i SSMS Object Explorer

Oopps! Upgrade your browser pretty please. Oopps! Upgrade your browser pretty please.

Antag att du har ett databashotell med ett flertal olika kunder. I detta scenario vill man säkerligen begränsa rättigheterna för de olika kunderna så att de bara har tillgång till sin egen databas.
Man kan skapa login för användaren och tilldela behörighet i de databaser som är aktuella. Detta fungerar fint, användaren kan logga in i Management Studio och kommer bara åt just de databaser som där vi tilldelat rättigheter.

Men användaren kan ju fortfarande se alla andra databaser i Management Studio Object Explorer, hur åtgärdar vi det?
I ett databashotell med många olika kunder kanske man inte vill visa tex hur många databaser som finns eller namnen på de andra databaserna etc.

För att begränsa vad en användare kan se i Management Studio Object Explorer kan man köra följande:
Antag att jag har en databas som heter SQLService och ett login som heter SQLService med begränsade rättigheter.

DENY VIEW ANY DATABASE TO [SQLService];

Om jag nu loggar in i Management Studio med mitt login (SQLService) och expanderar databasträdet kan jag inte se någon databas, bara systemdatabaserna master och tempdb.
EX:

 

Trots att jag har behörighet i databasen kan jag alltså inte se den. Provar nu att sätta min användare som databasägare:

ALTER AUTHORIZATION ON DATABASE::SQLService TO SQLService;

Nu kan jag se min egen databas och ingen annan.
EX:

Denna lösning är väl inte helt hundraprocentig, att sätta om databasägare till något annat än sa kanske inte är önskvärt ur alla synvinklar. Man hade hoppats på att detta kunde var implementerat lite bättre, finns även ett connect item anslaget av vår Svenske hjälte Erland Sommarskog:

http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=273830