Вход на сайт
Benutzer v SQL2008 : zapros s sysobjects s "sa" und 'user': comische performance
144 просмотров
Перейти к просмотру всей ветки
rimqpp0 гость
в ответ Nickolaychuk 24.08.09 17:07
я сначала попробовал всевозможые granty useram дать.
grant CONTROL оказался самый "еффективный". но получилась чушь, т.к. дает почти 'sa' привилегии.
потом методом тыков нашел решение через sys.objects. для приведенного выше кода получается так:
ALTER VIEW [dbo].[V_Permissions] AS
SELECT TOP 100 PERCENT
REPLACE(REPLACE(REPLACE(ObjectName,'[dbo].',''),'[',''),']','') AS Name,
--has_perms_by_name(ObjectName, 'OBJECT', 'ANY') AS AnyPermission,
--has_perms_by_name(ObjectName, 'OBJECT', 'SELECT') AS SelectPermission,
--has_perms_by_name(ObjectName, 'OBJECT', 'INSERT') AS InsertPermission,
--has_perms_by_name(ObjectName, 'OBJECT', 'UPDATE') AS UpdatePermission,
--has_perms_by_name(ObjectName, 'OBJECT', 'DELETE') AS DeletePermission,
[Read] = CAST(CASE WHEN has_perms_by_name(ObjectName, 'OBJECT', 'SELECT')& 1 >0 THEN 1 ELSE 0 END AS BIT),
[Write]= CAST(CASE WHEN (has_perms_by_name(ObjectName, 'OBJECT', 'INSERT') & 1)*
(has_perms_by_name(ObjectName, 'OBJECT', 'UPDATE')& 1)*
(has_perms_by_name(ObjectName, 'OBJECT', 'DELETE') & 1) > 0 THEN 1 ELSE 0 END AS BIT)
FROM (SELECT
QUOTENAME(SCHEMA_NAME(schema_id)) + '.'
+ QUOTENAME(OBJECT_NAME(object_id)) AS ObjectName
FROM sys.objects
-- nur Tabellen, Sichten, User-Funktionen und Proceduren
WHERE TYPE IN ('U', 'V', 'P','TF','FN', 'SQ')
) AS o
ORDER BY ObjectName
Но представление об INFORMATION_SCHEMA пока смутное. Moжно в пару предложениях ваше мнение что ето такое?
grant CONTROL оказался самый "еффективный". но получилась чушь, т.к. дает почти 'sa' привилегии.
потом методом тыков нашел решение через sys.objects. для приведенного выше кода получается так:
ALTER VIEW [dbo].[V_Permissions] AS
SELECT TOP 100 PERCENT
REPLACE(REPLACE(REPLACE(ObjectName,'[dbo].',''),'[',''),']','') AS Name,
--has_perms_by_name(ObjectName, 'OBJECT', 'ANY') AS AnyPermission,
--has_perms_by_name(ObjectName, 'OBJECT', 'SELECT') AS SelectPermission,
--has_perms_by_name(ObjectName, 'OBJECT', 'INSERT') AS InsertPermission,
--has_perms_by_name(ObjectName, 'OBJECT', 'UPDATE') AS UpdatePermission,
--has_perms_by_name(ObjectName, 'OBJECT', 'DELETE') AS DeletePermission,
[Read] = CAST(CASE WHEN has_perms_by_name(ObjectName, 'OBJECT', 'SELECT')& 1 >0 THEN 1 ELSE 0 END AS BIT),
[Write]= CAST(CASE WHEN (has_perms_by_name(ObjectName, 'OBJECT', 'INSERT') & 1)*
(has_perms_by_name(ObjectName, 'OBJECT', 'UPDATE')& 1)*
(has_perms_by_name(ObjectName, 'OBJECT', 'DELETE') & 1) > 0 THEN 1 ELSE 0 END AS BIT)
FROM (SELECT
QUOTENAME(SCHEMA_NAME(schema_id)) + '.'
+ QUOTENAME(OBJECT_NAME(object_id)) AS ObjectName
FROM sys.objects
-- nur Tabellen, Sichten, User-Funktionen und Proceduren
WHERE TYPE IN ('U', 'V', 'P','TF','FN', 'SQ')
) AS o
ORDER BY ObjectName
Но представление об INFORMATION_SCHEMA пока смутное. Moжно в пару предложениях ваше мнение что ето такое?