| 
	
 | 
 Posted by Erland Sommarskog on 04/29/06 00:38 
rcamarda (robc390@hotmail.com) writes: 
> more research I have: 
> CREATE TRIGGER F_Student_SSN.eSSN 
>    ON  ds_v6_staging.F_STUDENT_SSN 
>   update, insert 
> AS 
>   update f_student_ssn 
>   set essn =  cast(EncryptByAsymKey(AsymKey_ID('Student_aKey'), 
> cast(eSSN as nvarchar(11))) as nvarchar(40)) 
>  
> But still get error 
 
I realise that you are working with sensitive data, and may want to  
disclose much. However, with knowing what error you get, it's difficult 
to assist. 
 
Of course the trigger as such is not a good one, since you are updating 
the entire table, you will encrypt already encrypted data on each  
INSERT or UPDATE. 
 
You need to add: 
 
   update f_student_ssn 
   set essn =  cast(EncryptByAsymKey(AsymKey_ID('Student_aKey'), 
    cast(eSSN as nvarchar(11))) as nvarchar(40)) 
   from  f_student_ssn f 
   join  inserted i ON f.pkcol = i.pkcol 
 
The table "inserted" holds an after-image of the inserted/updated rows. 
Note the plural: a trigger fires one per statement. 
 
But the above only makes sense for an INSERT trigger. For an UPDATE 
it's tricker. You could add: 
 
  IF UPDATE(eSSN) 
  BEGIN  
     UPDATE ... 
  END 
 
But if someone for some reason says: 
 
  UPDATE tbl SET eSSN = eSSN 
 
you will end up encrypting the encrypted value. 
 
 
--  
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se 
 
Books Online for SQL Server 2005 at 
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx 
Books Online for SQL Server 2000 at 
http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
 
  
Navigation:
[Reply to this message] 
 |