Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DDLTrigger - access security / 10 сообщений из 10, страница 1 из 1
29.09.2021, 19:00
    #40100779
zindur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
Надо временно потрекать object changes в базе (на какое время пока не известно)
Все евенты будут писаться в отдельную базу, например DBATools, так как на сервере будут несколько баз.
Скрипт/триггер будет создаваться на каждой базе.

Пример скрипта

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
CREATE OR ALTER TRIGGER DDLTriggerTrackingSchemaChanges
    ON DATABASE
    FOR DDL_DATABASE_LEVEL_EVENTS
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE
        @EventData XML = EVENTDATA();
 
    DECLARE @ip varchar(48) = CONVERT(varchar(48),CONNECTIONPROPERTY('client_net_address'));
 
    INSERT DBATools.dbo.DDLEvents
    (
        EventType,
        EventDDL,
        EventXML,
        DatabaseName,
        SchemaName,
        ObjectName,
        HostName,
        IPAddress,
        ProgramName,
        LoginName
    )
    SELECT
        @EventData.value('(/EVENT_INSTANCE/EventType)[1]',   'NVARCHAR(100)'), 
        @EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)'),
        @EventData,
        DB_NAME(),
        @EventData.value('(/EVENT_INSTANCE/SchemaName)[1]',  'NVARCHAR(255)'), 
        @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]',  'NVARCHAR(255)'),
        HOST_NAME(),
        @ip,
        PROGRAM_NAME(),
        SUSER_SNAME();
END



Проблема...
не все пользователи имеют допуск к базе DBATools и иммено к таблице DBATools.dbo.DDLEvents
И поэтому вылетает ошибка

Код: sql
1.
2.
Msg 916, Level 14, State 2, Line 3
The server principal "BLABLA_USER" is not able to access the database "DBATools" under the current security context



Как сделать чтоб все имели допуск хотябы на INSERT, и для новых пользователей тоже?
Спасибо
...
Рейтинг: 0 / 0
29.09.2021, 19:13
    #40100781
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
Особенно умиляет HOST_NAME().

Ну а так-то, дать роли public базы DBATools право на insert.
...
Рейтинг: 0 / 0
29.09.2021, 19:21
    #40100782
zindur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
aleks222,

делал...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
use [DBATools]
GO
GRANT INSERT TO [public]
GO

use [DBATools]
GO
GRANT INSERT ON [dbo].[DDLEvents] TO [public]
GO



но видимо чтото не доделал
...
Рейтинг: 0 / 0
29.09.2021, 19:24
    #40100783
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
Пардон.
Дать guest право connect (включить) и право insert.

Код: sql
1.
GRANT CONNECT TO guest
...
Рейтинг: 0 / 0
29.09.2021, 19:45
    #40100785
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
Можно использовать сервис брокер

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
use DBATools

CREATE TABLE [dbo].[Logging](
	[LoggingID] [int] IDENTITY(1,1) NOT NULL,
	[EventTime] [datetime] not NULL,
	[EventType] [nvarchar](100) NULL,
	[LoginName] [nvarchar](50)  NULL,
	[UserName] [nvarchar](100)  NULL,
	[HostName] [nvarchar](50)  NULL,
	[DatabaseName] [nvarchar](50)  NULL,
	[SchemaName] [nvarchar](100)  NULL,
	[ObjectName] [nvarchar](100)  NULL,
	[ObjectType] [nvarchar](100)  NULL,
	[FullLog] [xml] NULL,
	[MessageType] [nvarchar](256)  NULL
) ON [PRIMARY]

alter table [dbo].[Logging] add constraint pk_logging primary key ([EventTime],[LoggingID])

CREATE PROCEDURE [dbo].[LoggingProc]
AS
SET NOCOUNT ON;

DECLARE     @message_body XML,
            @message_type_name NVARCHAR(256),
            @dialog UNIQUEIDENTIFIER ;

--Endless loop
WHILE (1 = 1)
BEGIN
   -- BEGIN TRANSACTION ;

    -- Receive the next available message

    WAITFOR (
        RECEIVE TOP(1) 
            @message_type_name=message_type_name,
            @message_body=message_body,  
            @dialog = conversation_handle  
            FROM LoggingQueue
    ), TIMEOUT 2000

	--Rollback and exit if no messages were found
	IF (@@ROWCOUNT = 0)
        BEGIN
            --ROLLBACK TRANSACTION ;
            BREAK ;
        END ;

   --End conversation of end dialog message

    IF (@message_type_name = 'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog')
    BEGIN
        PRINT 'End Dialog received for dialog # ' + cast(@dialog as nvarchar(40)) ;
        END CONVERSATION @dialog ;
    END ;
    ELSE
    BEGIN

	BEGIN TRY
			if @message_body.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)') <> 'CREATE_STATISTICS'
			begin

			INSERT INTO Logging (
			EventTime,
			EventType,
			LoginName,
			UserName,
			HostName,
			DatabaseName,
			SchemaName,
			ObjectName,
			ObjectType,
			FullLog,
			MessageType)
			VALUES
			(
			
			@message_body.value('(/EVENT_INSTANCE/PostTime)[1]','datetime'),
			@message_body.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)'),
			@message_body.value('(/EVENT_INSTANCE/LoginName)[1]','nvarchar(50)'),
			@message_body.value('(/EVENT_INSTANCE/UserName)[1]','nvarchar(100)'),
			@message_body.value('(/EVENT_INSTANCE/ServerName)[1]','nvarchar(50)'),
			@message_body.value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(50)'),
			@message_body.value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)'),
			@message_body.value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)'),
			@message_body.value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(100)'),
			@message_body,
			@message_type_name)
			end
	END TRY

	BEGIN CATCH
		SELECT ERROR_NUMBER() AS ErrorNumber;
		raiserror('Error thrown from LoggingProc',16,1) with LOG
	END CATCH;

END 
--COMMIT TRANSACTION 
END 
go

ALTER DATABASE DBATools SET  ENABLE_BROKER 
GO

CREATE QUEUE [dbo].[LoggingQueue] WITH STATUS = ON , RETENTION = OFF , ACTIVATION (  STATUS = ON , PROCEDURE_NAME = [dbo].[LoggingProc] , MAX_QUEUE_READERS = 2 , EXECUTE AS OWNER  ) ON [PRIMARY] 
go

CREATE SERVICE [LoggingService]  AUTHORIZATION [dbo]  ON QUEUE [dbo].[LoggingQueue] ([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification])
go

CREATE ROUTE [LoggingRoute]   AUTHORIZATION [dbo]   WITH  SERVICE_NAME  = N'LoggingService' ,  ADDRESS  = N'LOCAL' 
go


CREATE EVENT NOTIFICATION Logging_Event_Notification 
ON SERVER
FOR DDL_EVENTS
TO SERVICE 'LoggingService', 'current database'
GO
...
Рейтинг: 0 / 0
29.09.2021, 20:21
    #40100794
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
zindur,

авторНадо временно потрекать object changes в базе
DDLTrigger - это не удобно, настройте аудит.
...
Рейтинг: 0 / 0
30.09.2021, 12:12
    #40100927
zindur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
не работает :(

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
use [DBATools]
GRANT CONNECT TO guest

use [DBATools]
GO
GRANT INSERT TO [public]
GO

use [DBATools]
GO
GRANT INSERT ON [dbo].[DDLEvents] TO [public]
GO



aleks222
Пардон.
Дать guest право connect (включить) и право insert.

Код: sql
1.
GRANT CONNECT TO guest

...
Рейтинг: 0 / 0
30.09.2021, 12:13
    #40100928
zindur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
интересно будем думать...
SERG1257,
...
Рейтинг: 0 / 0
30.09.2021, 12:53
    #40100941
zindur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
В моем случае Audit больше мороки ... (может я не прав) :(
базы в AWS-RDS там надо будет настроить и S3, потом несколько зон, пару десяток серверов...

Владислав Колосов
zindur,

авторНадо временно потрекать object changes в базе

DDLTrigger - это не удобно, настройте аудит.
...
Рейтинг: 0 / 0
30.09.2021, 14:47
    #40100981
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DDLTrigger - access security
zindur,

не знаю, что такое AWS-RDS и S3, аудит настраивается на SQL, возможно, придётся повозиться с фильтрами, чтобы не писал лишнее.
https://docs.microsoft.com/ru-ru/sql/relational-databases/security/auditing/sql-server-audit-database-engine?view=sql-server-ver15
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DDLTrigger - access security / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]