Guest User

Untitled

a guest
Oct 31st, 2017
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. --Create Example data
  2.  
  3.  
  4.  
  5. CREATE TABLE [dbo].[Orders](
  6. [OrderID] [int] IDENTITY(1,1) NOT NULL,
  7. [UserID] [int] NULL,
  8. [Description] [varchar](50) NULL,
  9. [Quantity] [int] NULL,
  10. CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED
  11. (
  12. [OrderID] ASC
  13. )
  14. )
  15. GO
  16. SET IDENTITY_INSERT [dbo].[Orders] ON
  17. GO
  18. INSERT [dbo].[Orders] ([OrderID], [UserID], [Description], [Quantity]) VALUES (1, 5, N'Apples', 5)
  19. GO
  20. INSERT [dbo].[Orders] ([OrderID], [UserID], [Description], [Quantity]) VALUES (2, 5, N'Oranges', 8)
  21. GO
  22. INSERT [dbo].[Orders] ([OrderID], [UserID], [Description], [Quantity]) VALUES (3, 7, N'Pears', 2)
  23. GO
  24. INSERT [dbo].[Orders] ([OrderID], [UserID], [Description], [Quantity]) VALUES (4, 7, N'Oranges', 7)
  25. GO
  26. SET IDENTITY_INSERT [dbo].[Orders] OFF
  27. GO
  28.  
  29.  
  30. --Add a login and user
  31.  
  32.  
  33. CREATE LOGIN db_user
  34. WITH PASSWORD = '&!pAssword';
  35.  
  36. CREATE USER db_user FOR LOGIN db_user WITH DEFAULT_SCHEMA=[dbo]
  37.  
  38. ALTER ROLE db_datareader
  39. ADD MEMBER db_user
  40.  
  41.  
  42. GO
  43. --Create a function to filter the user id with
  44.  
  45. create function dbo.fn_securitypredicate(@UserID int)
  46. returns table
  47. with schemabinding
  48. AS
  49. return
  50. Select 2 AS fn_securitypredicate_result
  51. Where DATABASE_PRINCIPAL_ID() = DATABASE_PRINCIPAL_ID('db_user')
  52. and Convert(int, Session_Context(N'UserID')) = @UserID
  53.  
  54.  
  55. GO
  56.  
  57. --Apply the filter to the table - multiple tables can use the same filter
  58.  
  59. CREATE SECURITY POLICY dbo.OrderSecurityPolicy
  60. ADD FILTER PREDICATE dbo.fn_securitypredicate(UserID) ON dbo.Orders
  61.  
  62. --Test the filter
  63.  
  64. EXECUTE AS USER = 'db_user'
  65. --this would be set at login by your application
  66. EXEC sp_set_session_context @key = N'UserID', @value = 5
  67.  
  68. --This will return 2
  69. Select * from Orders where userid = 5
  70. --This will return 0
  71. Select * from Orders where userid = 7
  72.  
  73. GO
  74.  
  75. EXECUTE AS USER = 'db_user'
  76. EXEC sp_set_session_context @key = N'UserID', @value = 7
  77. --This will return 0
  78. Select * from Orders where userid = 5
  79. --This will return 2
  80. Select * from Orders where userid = 7
Add Comment
Please, Sign In to add comment