Row Level Security in SQL Server without using View
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAhf7htYSFP_diAmMsivEAf05IrYNs4MPeRGq8HvToHjEWtamkOJvfiL3Dk3CjrlrRQQTAoBUnZgefbA_VsiKFBFeSRz2gheHzEjRxxkPF6MLQMgCf0CLcjtM9c33fRA6nXMU2zU9juok/s200/security.jpg)
Let’s look this Row-Level-Security
of SQL server 2014. This is not available in older versions. To implement this you
just have to go through below steps:
Note : To know the existing security policy and meta data you can use below query
select * from sys.security_policies
select object_name(object_id),OBJECT_NAME(target_object_id),predicate_definition from sys.security_predicates
Note : To know the existing security policy and meta data you can use below query
select * from sys.security_policies
select object_name(object_id),OBJECT_NAME(target_object_id),predicate_definition from sys.security_predicates
go
USE RLSDB
/* Creating LOGIN/user */ GO
CREATE LOGIN RDYDistAdmin WITH PASSWORD='admin#123'
CREATE USER TLGStateAdmin FOR LOGIN TLGStateAdmin
CREATE USER RDYDistAdmin FOR LOGIN RDYDistAdmin
GO
EXEC sp_addrolemember N'db_datareader', N'RDYDistAdmin'
create table Tenant (tntid int identity primary key , tntname varchar(100))
goCreate table Person(id int identity , name varchar(100)
, tenanatid int , foreign key(tenanatid) references Tenant(tntid) )
go
Insert into Tenant (tntname)
select 'NorthZone'
union
select 'SouthZone'
go
Insert into Person (name,tenanatid) select 'vikas',1
union
select 'amit',1
union select 'sachin',2
union
select 'TLGStateAdmin',2
union
select 'RDYDistAdmin',2
/* Creating security schema to place security function separate*/
CREATE SCHEMA SECURITY;
CREATE FUNCTION SECURITY.fn_SecurityCheck(@personName AS varchar(100))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS fn_TenantSecurityCheck_result
WHERE @personName=user_name()
go
CREATE SECURITY POLICY personfilter
ADD FILTER PREDICATE Security.fn_SecurityCheck(name)
ON dbo.person--,dbo.sales1
WITH (STATE = ON);
go
Now Let' s test it :
EXECUTE AS USER = 'TLGStateAdmin';
SELECT * FROM person;
REVERT;
EXECUTE AS USER = 'RDYDistAdmin';
SELECT * FROM person;
REVERT;
No comments:
Post a Comment