Одна причина вставить каскадное удаление (вместо того, чтобы делать его в коде) состоит в том, чтобы улучшить производительность.
Случай 1: С каскадным удалением
DELETE FROM table WHERE SomeDate < 7 years ago;
Случай 2: Без каскадного удаления
FOR EACH R IN (SELECT FROM table WHERE SomeDate < 7 years ago) LOOP
DELETE FROM ChildTable WHERE tableId = R.tableId;
DELETE FROM table WHERE tableId = R.tableid;
/* More child tables here */
NEXT
, Во-вторых, когда Вы добавляете в дополнительной дочерней таблице с каскадным удалением, код в случае, если 1 продолжает работать.
я только вставил бы каскад, где семантика отношений является "частью". Иначе некоторый идиот удалит половину Вашей базы данных, когда Вы сделаете:
DELETE FROM CURRENCY WHERE CurrencyCode = 'USD'
Похоже, что использование ProtectedData (которое является оболочкой Windows Data Protection API ) является моим лучшим bet, так как он имеет возможность шифрования на основе текущего пользователя, вошедшего в систему.
byte[] dataToEncrypt = new byte[] { ... };
// entropy will be combined with current user credentials
byte[] additionalEntropy = new byte { 0x1, 0x2, 0x3, 0x4 };
byte[] encryptedData = ProtectedData.Protect(
dataToEncrypt, additionalEntropy, DataProtectionScope.CurrentUser);
byte[] decryptedData = ProtectedData.Unprotect(
encryptedData, additionalEntropy, DataProtectionScope.CurrentUser);
Лучшая практика - никогда не хранить учетные данные, только токены Kerberos ... к сожалению, не все ресурсы позволяют такую аутентификацию.
В MSDN есть множество рекомендаций относительно паролей. Вам нужно будет найти управляемую оболочку для CryptProtectData