2016-03-24 3 views
0

Интересно, как получить или создать идентификатор сеанса, который является уникальным для базы данных навсегда.Как создать уникальный идентификатор сеанса (в отличие от SSPID)

@SSPID не является уникальным. Он используется повторно после выхода из системы.

+2

Для чего это необходимо? GUID являются обычным методом для создания чего-то, что считается уникальным. –

+0

@ AllanS.Hansen Как я могу получить идентификатор GUID при входе в систему? С триггером базы данных? Идея состоит в том, чтобы иметь уникальный идентификатор, который можно использовать для регистрации различных действий пользователя. – askolotl

+0

вам нужен постоянный идентификатор или изменения в каждой сессии? – Squirrel

ответ

0

Недостаточная репутация, поэтому это не комментарий.

Вы можете использовать SPID + GETDATE() для получения уникальной идентифицируемой сессии даже после нескольких лет.

+0

Но как мне это создать? И как мне сохранить одно и то же во время одного сеанса? Уникальный идентификатор должен быть создан во время входа в систему, а затем он должен быть одинаковым во время всего сеанса. Если я снова назову 'GetDate()', это, конечно, изменится. – askolotl

+0

Создайте уникальный идентификатор только во время входа в систему. Зачем вызывать 'GETDATE()' снова для того же сеанса? – freakyhat

+0

ОК, допустим, я создаю идентификатор во время входа в систему. Затем позже мне это нужно в каком-то триггере обновления. или в другом процедре. Как мне снова получить тот же ID? – askolotl

0

вы можете использовать триггер LOGON для создания уникального идентификатора и вставки в таблицу. Ваше приложение может затем извлечь этот идентификатор для использования

CREATE TABLE session_audit 
    (
     uid  uniqueidentifier not null, 
     login_name varchar(100), 
     login_dt datetime, 
     session_id smallint, 
     hostname nvarchar(128), 
     constraint pk_session_audit primary key (uid) 
    ) 

CREATE TRIGGER session_audit_trigger 
ON ALL SERVER FOR LOGON 
AS 
BEGIN 
    IF SUSER_SNAME() not in ('sa') -- do not log for sa 
    BEGIN 
    INSERT INTO Test.dbo.session_audit (uid, login_name, login_dt, session_id, hostname) 
    SELECT NEWID(), SUSER_SNAME(), GETDATE(), @@SPID, HOST_NAME(); 
    END 
END; 
GO 
ENABLE TRIGGER session_audit_trigger ON ALL SERVER; 
+0

Спасибо (не могу проголосовать, нужно 15 повторений). Это идет в направлении, которое я ищу. – askolotl

Смежные вопросы