Có rất nhiều cách để chúng ta có thể lấy được thông tin của người dùng hiện tại trong phiên làm việc của SQL, việc sử dụng hàm SESSION_USER là một trong số các cách để thực hiện việc đó. Trong bài viết này, Stringee và các bạn sẽ cùng nhau tìm hiểu về hàm này và cách sử dụng của nó đối với hệ cơ sở dữ liệu SQL Server Microsoft nhé.

1. Hàm SESSION_USER được sử dụng như thế nào?

Câu lệnh SESSION_USER là lệnh được sử dụng để trả về tên người dùng của phiên hiện tại trong cơ sở dữ liệu SQL Server.

Hàm SESSION_USER được sử dụng để trả về tên người dùng hiện tại đang sử dụng phiên làm việc truy cập vào cơ sở dữ liệu.

2. Cú pháp sử dụng

SESSION_USER

Nó sẽ trả về cho chúng ta một kết quả có dạng là nvarchar(128).

Khi sử dụng SESSION_USER với constraints là DEFAULT trong các lệnh CREATE TABLE hoặc ALTER TABLE, SESSION_USER có thể bị điền vào một bảng khi không có giá trị mặc định được đề cập tới. Phương thức này không nhận vào biến nào cả và nó có thể được sử dụng trong các truy vấn.

Nếu SESSION_USER được gọi khi có một sự kiện xảy ra, SESSION_USER sẽ trả về tên của người dùng đang gây ra sự kiện đó.

3. Các ví dụ cụ thể

3.1. Trả về người dùng hiện tại trong phiên làm việc

Ví dụ sau đây sử dụng một biến được định nghĩa có dạng là nchar, gán giá trị hiện tại của SESSION_USER vào biến đó và in nó ra trong một nội dung thông báo bằng chữ.

DECLARE @session_usr NCHAR(30);  
SET @session_usr = SESSION_USER;  
SELECT 'This session''s current user is: '+ @session_usr;  
GO

Đây sẽ là kết quả trả về nếu người dùng hiện tại là Surya:

--------------------------------------------------------------
This session's current user is: Surya

(1 row(s) affected)

>>> Xem thêm bài viết về SQL:

Tìm hiểu về cơ sở dữ liệu phi quan hệ MongoDB

Hướng dẫn sử dụng Subquery trong SQL

Tìm hiểu về ràng buộc (Constraint) trong SQL

3.2. Sử dụng SESSION_USER với constraint là DEFAULT

Ví dụ sau đây tạo một bảng sử dụng SESSION_USER làm ràng buộc DEFAULT cho tên của người ghi lại việc nhận lô hàng.

USE AdventureWorks2022;  
GO  
CREATE TABLE deliveries3  
(  
 order_id INT IDENTITY(5000, 1) NOT NULL,  
 cust_id  INT NOT NULL,  
 order_date SMALLDATETIME NOT NULL DEFAULT GETDATE(),  
 delivery_date SMALLDATETIME NOT NULL DEFAULT   
    DATEADD(dd, 10, GETDATE()),  
 received_shipment NCHAR(30) NOT NULL DEFAULT SESSION_USER  
);  
GO

Các bản ghi được thêm vào bảng sẽ được đóng dấu tên người dùng. Trong ví dụ này, Wanida, Sylvester và Alejandro xác minh việc nhận hàng. Điều này có thể được mô phỏng bằng cách chuyển đổi ngữ cảnh của người dùng khi sử dụng EXECUTE AS.

EXECUTE AS USER = 'Wanida'  
INSERT deliveries3 (cust_id)  
VALUES (7510);  
INSERT deliveries3 (cust_id)  
VALUES (7231);  
REVERT;  
EXECUTE AS USER = 'Sylvester'  
INSERT deliveries3 (cust_id)  
VALUES (7028);  
REVERT;  
EXECUTE AS USER = 'Alejandro'  
INSERT deliveries3 (cust_id)  
VALUES (7392);  
INSERT deliveries3 (cust_id)  
VALUES (7452);  
REVERT;  
GO

Truy vấn sau đây chọn tất cả thông tin từ bảng Delivery3.

SELECT order_id AS 'Order #', cust_id AS 'Customer #',   
   delivery_date AS 'When Delivered', received_shipment   
   AS 'Received By'  
FROM deliveries3  
ORDER BY order_id;  
GO

Kết quả trả về sẽ là:

Order #   Customer #  When Delivered       Received By
--------  ----------  -------------------  -----------
5000      7510        2005-03-16 12:02:14  Wanida
5001      7231        2005-03-16 12:02:14  Wanida
5002      7028        2005-03-16 12:02:14  Sylvester
5003      7392        2005-03-16 12:02:14  Alejandro
5004      7452        2005-03-16 12:02:14  Alejandro

(5 row(s) affected)

3.3. Sử dụng SESSION_USER để trả về người dùng hiện tại đang sử dụng phiên làm việc

Ví dụ sau trả về người dùng trong phiên làm việc hiện tại:

SELECT SESSION_USER;

Kết

Trên đây là một số phân tích của Stringee về cách sử dụng hàm SESSION_USER trong SQL Server, bạn có thể áp dụng chúng để kiểm soát các hành động và xem ai đang có quyền truy vấn vào hệ thống.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: