En utilisant T-SQL et Microsoft SQL Server 2014 , j'essaye de find un moyen de restreindre l'access à une table si un paramètre spécifique n'est pas présent.
Je peux le faire sur SQL Server 2016 en créant une fonction qui utilise la fonction SESSION_CONTEXT()
, puis en l'appliquant à mon schéma.
Comme je n'ai pas access à SESSION_CONTEXT()
dans SQL Server 2014, je ne parviens pas à get la valeur de la key spécifiée dans le context de session en cours.
Quelqu'un peut-il suggérer une solution qui me permettrait de contourner l'utilisation de SESSION_CONTEXT () pour ce scénario (ou suggérer une meilleure solution)
Compatible SQL Server 2016 T-SQL
CREATE SCHEMA RessortingctSchema GO CREATE FUNCTION RessortingctSchema.DenyWithoutParameter (@Parameter INT) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS VALID_PARAMETER_SUPPLIED WHERE @Parameter = CAST(SESSION_CONTEXT(N'@Parameter') AS INT) GO CREATE SECURITY POLICY RessortingctSchema.ScehmaParameterRequirementForTableX ADD FILTER PREDICATE RessortingctSchema.DenyWithoutParameter (@Parameter) ON dbo.TableX ,ADD BLOCK PREDICATE RessortingctSchema.DenyWithoutParameter (@Parameter) ON dbo.TableX GO
Créez une table dans le schéma RessortingctSchema
,
Ajoutez-y une input pour chaque session / connection si nécessaire, puis réécrivez RessortingctSchema.DenyWithoutParameter
pour sélectionner à partir de là, et de time en time, collectez datatables.