数据库SQL Server 中如何构建受限制的数据库(sqlserver 受限)
视图
数据库受限制的视图是指被限制无法在视图中增删改查,其适合于某些管理用户只允许浏览而不具有编辑权限以及要保护数据安全的场景。 SQL Server 中如何构建受限制的数据库视图?本文将介绍如何通过创建SELECT存储过程(Create Select stored procedure),视图(view)以及表触发器(table trigger)来构建受限制的数据库视图。
一、使用SELECT存储过程创建受限制的数据库视图
所有SQL查询都可以存储在一个SQL存储过程中。因此,可以创建一个SELECT存储过程来实现受限制的数据库视图的效果。该存储过程使用SELECT语句实现视图查询:
CREATE PROCEDURE [dbo].[SelectAll_View] AS
BEGIN
SELECT * FROM [dbo].[Table_view]
END
以上存储过程可以创建一个受限制的视图,其实际限制一般取决于用户本身拥有的基本操作权限。
二、使用视图构建受限制的数据库视图
创建视图是另一种构建受限制的数据库视图的方式。可以利用视图实现受限制的数据库视图,并且只允许读取操作,即不可以对表内容进行增删改查。
例如:下面的视图定义会将用户数据仅局限在表View中所定义的字段:
CREATE VIEW View_User
AS
SELECT Username, Email, Register_date
FROM Table_User
WHERE IsActive=1
以上视图受到了只能查看操作的限制。凡是以“Select”语句开头的视图定义都具有只能查询操作的属性。
三、使用表触发器构建受限制的数据库视图
表触发器(table trigger)可以在表层面实现受限制的数据库视图。它可以监控表上的更新、插入或删除操作,当表上发生变化时,即可发起表触发器设置的数据审计操作:
CREATE TRIGGER T_view_check
ON [dbo].[Table_view]
FOR INSERT,UPDATE,DELETE
AS
BEGIN
DECLARE @Operation VARCHAR(30);
if EXISTS(SELECT 1 FROM deleted)
SET @Operation = ‘UPDATE’;
else if EXISTS(SELECT 1 FROM inserted)
SET @Operation = ‘INSERT’;
else
SET @Operation = ‘DELETE’;
IF @Operaion ‘SELECT’
BEGIN
RAISERROR(‘Permission Denied !’, 16, 1);
ROLLBACK TRANSACTION;
RETURN;
END
END
以上触发器的设置只会在发生增删改操作时触发,此时会抛出“permission Denied”的报错信息,从而实现了管理用户只能浏览,却不能编辑数据库视图内容的效果。
结论
以上文章介绍了SQL Server 中如何构建受限制的数据库视图的方法,包括创建SELECT存储过程,视图以及表触发器来实现受限制的数据库视图的效果。由于上述三种方法从技术上就实现了数据库视图的受限,因此它们都可以用来构建受限制的数据库视图,帮助管理者实现安全可控。