I created a symmetric key in SQL2016 and then encrypted a single column in the Data Table (PhoneNo).If I run the following code the field is unencrypted and displays the result
OPEN SYMMETRIC KEY SymKey_Test DECRYPTION BY CERTIFICATE Certificate_Test;SELECT ClientContactTest.ClientID, ClientContactTest.ContactID, ClientContactTest.Title, ClientContactTest.Forename, ClientContactTest.Surname, CONVERT(varchar, DecryptByKey(ClientContactTest.PhoneNo_Encrypt)) AS PhoneNo, ClientContactTest.MobileNo, ClientContactTest.EMailAddress, Lookup_ContactType.Description AS ContactTypeDescriptionFROM ClientContactTest LEFT OUTER JOIN Lookup_ContactType ON ClientContactTest.ContactTypeID = Lookup_ContactType.ContactTypeIDWHERE (ClientContactTest.ClientID = 7) AND (ClientContactTest.SiteID = 0) AND (ClientContactTest.ContactID = 1)CLOSE SYMMETRIC KEY SymKey_Test
BUT if I put the exact same code inside a stored procedure it returns NULL on this field.
CREATE PROCEDURE [dbo].[ClientContactTest_LoadRecord_Encrypted]ASBEGIN OPEN SYMMETRIC KEY SymKey_Test DECRYPTION BY CERTIFICATE Certificate_Test; SELECT ClientContactTest.ClientID, ClientContactTest.ContactID, ClientContactTest.Title, ClientContactTest.Forename, ClientContactTest.Surname, CONVERT(varchar, DecryptByKey(ClientContactTest.PhoneNo_Encrypt)) AS PhoneNo, ClientContactTest.MobileNo, ClientContactTest.EMailAddress, Lookup_ContactType.Description AS ContactTypeDescription FROM ClientContactTest LEFT OUTER JOIN Lookup_ContactType ON ClientContactTest.ContactTypeID = Lookup_ContactType.ContactTypeID WHERE (ClientContactTest.ClientID = 7) AND (ClientContactTest.SiteID = 0) AND (ClientContactTest.ContactID = 1) CLOSE SYMMETRIC KEY SymKey_TestEND
The SP has execute permission to a Role called CRMObjects.How do I get the correct result to be returned?
Tried the following but no difference
GRANT CONTROL ON CERTIFICATE :: Certificate_Test TO CRMObjects;GRANT CONTROL ON SYMMETRIC KEY :: SymKey_Tes TO CRMObjectsGRANT VIEW DEFINITION ON SYMMETRIC KEY::SymKey_Tes TO CRMObjectsGRANT VIEW DEFINITION ON Certificate::[Certificate_Tes] TO CRMObjects