Förra vecka släppte Microsoft CU3 för SQL Server 2008. Den innehåller en hel den fixar…
När det gäller rättigheter för användarna i databaserna finns det ingen möjlighet att se detta i SQL Server Management Studio på ett överskådligt sätt. Nedan är ett exempel som bättre visar de olika användarna och dess rättigheter och där vi kan se några av kolumnerna från SQL koden som följer längre ned.
Att de råder förrvirring om vilka rättighet man egentligen behöver för de olika användarna och dess roller möter vi ganska ofta. Ofta verkar det ha slutat med att man sätter sysadmin och detta är förstås inte bra, då det innebär totalt frihet att göra allt på servern.
Mer om databasroller kan man läsa här och om serverroller finns information här.
Nedan följer koden som visar de olika användarna för hela servern och dess databaser och den kan man förstås modifiera för att passa ens smak och tycke bättre
DECLARE @DB_USers TABLE
(DatabaseName sysname, UserName sysname, LoginType sysname, DBRoleName varchar(max),
CreateDate datetime, ModifyDate datetime, ServerRoleName varchar(max))
INSERT @DB_USers
EXEC sp_MSforeachdb
'USE [?]
SELECT ''?'', Users.Name, Users.Type_Desc, UserDBRole.DBRoleName, Users.Create_date,
ISNULL(UserDBRole.Modify_date, Users.Modify_date), ServerRole.name
FROM sys.server_principals Users
OUTER APPLY
(
SELECT
prin.name,
ISNULL(USER_NAME(mem.role_principal_id),'''') AS DBRoleName,
Create_date, Modify_date
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id
WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and
prin.is_fixed_role <> 1 AND prin.name NOT LIKE ''##%'' AND
prin.name COLLATE Finnish_Swedish_CI_AS = Users.Name COLLATE Finnish_Swedish_CI_AS
) UserDBRole
OUTER APPLY
(
SELECT principals.name
FROM
sys.server_principals principals
INNER JOIN sys.server_role_members members ON
principals.principal_id = members.role_principal_id
INNER JOIN sys.server_principals principals2 ON
principals2.principal_id = members.member_principal_id
WHERE principals2.name = Users.Name
) ServerRole
WHERE NOT Users.Name IN (''NT AUTHORITYSYSTEM'')
AND (NOT ServerRole.name IS NULL OR NOT UserDBRole.name IS NULL)'
SELECT
DatabaseName, LoginType, UserName, CreateDate AS CreateDate, ModifyDate,
STUFF(
(
SELECT DISTINCT ',' + CONVERT(VARCHAR(500),ServerRoleName)
FROM @DB_USers user2
WHERE
user1.DatabaseName=user2.DatabaseName AND user1.UserName=user2.UserName
FOR XML PATH('')
)
,1,1,'') AS ServerRoleName ,
STUFF(
(
SELECT DISTINCT ',' + CONVERT(VARCHAR(500),DBRoleName)
FROM @DB_USers user2
WHERE
user1.DatabaseName=user2.DatabaseName AND user1.UserName=user2.UserName
FOR XML PATH('')
)
,1,1,'') AS DBRoleName
FROM @DB_USers user1
GROUP BY DatabaseName, UserName ,LoginType ,CreateDate ,ModifyDate
ORDER BY DatabaseName, LoginType, UserName
