Измените оператор SELECT перед его выполнением - PullRequest
0 голосов
/ 07 мая 2020

У меня есть данные в таблице, к которым мне нужно запретить доступ, если явно не запрошено. Для удобства предположим, что это ProductId = 2.

Мне нужен способ запретить запросам к таблице возвращать ProductID 2, если явно не запрошено. Итак, если кто-то запрашивает

SELECT *
FROM MyTable

, мне нужно добавить WHERE ProductId <> 2 в запрос.

Единственный способ, которым я могу справиться с этим, - это создать представление, которое делает это , и все запросы go проходят через представление. Но это по-прежнему оставляет место для человеческой ошибки, которой я бы хотел избежать.

Как это можно сделать?

1 Ответ

0 голосов
/ 07 мая 2020

На основании вашего пояснения, в SQL 2016+ вы можете реализовать безопасность на уровне строк, однако, похоже, простое решение - создать хранимые процедуры с ProductID в качестве входного параметра, а затем использовать IF ... THEN logi c для достижения sh вашей цели. Я предоставляю базовый образец c, но вам нужно будет создать соответствующий уровень сложности в вашем logi c для достижения sh вашей цели, например, возможно, вам нужно передать более одного ProductID за раз, et c.

CREATE PROCEDURE dbo.uspGetProductsFromMyTable   
@ProductID INT = NULL  
AS
SET NOCOUNT ON;
IF @ProductID <> 2
 BEGIN;
  SELECT * FROM MyTable
  WHERE ProductID <> 2
  AND (@ProductID IS NULL OR ProductID = @ProductID);  
 END;
IF @ProductID = 2
 BEGIN;
  SELECT * FROM MyTable
  WHERE ProductID = 2
  AND (@ProductID IS NULL OR ProductID = @ProductID);  
 END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...