Шифрование Зарплаты оценивает в ASP.NET 2.0 и SQL Server 2005

Я верю, что вам нужна структура, когда вы говорите «пара». проверьте, дает ли приведенный ниже код ожидаемый результат.

С DataFrame:

import spark.sqlContext.implicits._
import org.apache.spark.sql.functions._
val data = Seq(("111",5,50000),("222",6,60000),("333",7,60000))
val df = data.toDF("EmpId","Experience","Salary")

val newdf = df.withColumn("EmpId", struct(lit("1").as("key"),col("EmpId").as("value")))
  .withColumn("Experience", struct(lit("2").as("key"),col("Experience").as("value")))
  .withColumn("Salary", struct(lit("3").as("key"),col("Salary").as("value")))
  .show(false)

вывод:

+--------+----------+----------+
|EmpId   |Experience|Salary    |
+--------+----------+----------+
|[1, 111]|[2, 5]    |[3, 50000]|
|[1, 222]|[2, 6]    |[3, 60000]|
|[1, 333]|[2, 7]    |[3, 60000]|
+--------+----------+----------+

С набором данных:

Сначала вам нужно определить класс дела для новой структуры, иначе вы не сможете создать набор данных

case class Employee2(EmpId: EmpData, Experience: EmpData, Salary: EmpData)
case class EmpData(key: String,value:String)

val ds = df.as[Employee]
val newDS = ds.map(rec=>{
  (EmpData("1",rec.EmpId), EmpData("2",rec.Experience.toString),EmpData("3",rec.Salary.toString))
})
val finalDS = newDS.toDF("EmpId","Experience","Salary").as[Employee2]
finalDS.show(false)

Вывод:

+--------+--------+------------+
|EmpId   |Experience|Salary    |
+--------+--------+------------+
|[1, 111]|[2, 5]  |[3, 50000]  |
|[1, 222]|[2, 6]  |[3, 60000]  |
|[1, 333]|[2, 7]  |[3, 60000]  |
+--------+--------+------------+

Спасибо

7
задан Anthony 29 September 2008 в 14:37
поделиться

5 ответов

SSL является, вероятно, Вашим лучшим выбором помешать кому-то осуществлять сниффинг, но знать, что это все еще возможно.

Что касается другого бита, SQL Server 2005 поддерживает шифрование уровня таблицы из поля. Вот статья о нем. Вы могли составить таблицу SALARY, которая связана с сотрудником, и сохраните ту таблицу зашифрованной.

4
ответ дан 6 December 2019 в 19:44
поделиться

Разработчики веб-приложения могли все еще получить доступ к числам зарплаты - это - весь вопрос доверия. Для противостояния этому Вы могли переключиться на модель, где шифрование/дешифрование происходит на клиентском, но это является более громоздким и все еще на 100% безопасным. Безопасность всегда является согласованием с удобством.

Необходимо использовать TLS/SSL (т.е. HTTPS) так, чтобы подслушивание Трафика HTTP было более трудно выполнить.

Нападение, которое можно рассмотреть, заменяет собственную зашифрованную фигуру зарплаты тем из человека, Вы интересуетесь, затем звоня департаменту бухгалтерского учета и спрашивая, какова Ваша текущая фигура зарплаты. Один способ инвертировать нападение состоит в том, чтобы иметь содержание зашифрованной ссылки поля зарплаты человек, которому это принадлежит.

3
ответ дан 6 December 2019 в 19:44
поделиться

Существует много методов шифрования, которые Вы могли использовать здесь в Вашем коде. Удостоверьтесь, что Вы выбираете тот, который берет ключ и "соль" (в противоположность просто использованию того же ключа каждый раз). При использовании того же ключа (без соли) каждый раз, когда Вы шифруете зарплату, то два сотрудника с той же зарплатой отобразят то же зашифрованное значение в базе данных, ставя под угрозу безопасность информации о зарплате.

Вы могли использовать уникальный идентификатор каждого сотрудника в качестве соли.

2
ответ дан 6 December 2019 в 19:44
поделиться

Вам определенно нужен SSL для предотвращения сниффинга чувствительного веб-трафика (не говоря уже о логинах), но это не решает проблему шифрования серверной стороны.

Для лишения возможности Вас как, разработчик для доступа к данным является трудной задачей. Для него для реальной работы все шифрование/дешифрование должно быть сделано только на машинах, к которым у Вас нет доступа. Теоретически необходимо было бы сделать своего рода расширение браузера, которое дешифрует данные зарплаты по клиентским машинам. Ваш работодатель должен был бы доверять Вам достаточно для не помещения бэкдора в клиентский код (или по крайней мере держать возможность проверки соответствия программы спецификациям по голове).

В большинстве случаев легче доверять разработчику для не раскрытия данных. Это - хорошая идея сохранить его на основе необходимости, но в конечном счете некоторые люди должны знать. (Например, бухгалтерские люди видят данные зарплаты все время.)

2
ответ дан 6 December 2019 в 19:44
поделиться

Вы определенно хотите использовать SSL для безопасности транспортировки. Вы могли также установить IPSec для транспортировки между веб-сервером и сервером базы данных.

Что касается обеспечения в базе данных, SQL Server 2005 имеет несколько функций шифрования:

1) EncryptByAsymKey - http://msdn.microsoft.com/en-us/library/ms186950.aspx
2) EncryptByKey - http://msdn.microsoft.com/en-us/library/ms174361.aspx
3) EncryptByPassPhrase - http://msdn.microsoft.com/en-us/library/ms190357.aspx
4) EncryptByCert - http://msdn.microsoft.com/en-us/library/ms188061.aspx

Очевидно, все они имеют связанное, дешифруют функцию.

Можно сохранить ключ или независимо от того, что Вы выбираете на веб-сервере (в machine.config или web.config или где-нибудь) и затем передаете его своим хранимым процедурам (или наряду с Вашим sql так или иначе) для шифрования.

2
ответ дан 6 December 2019 в 19:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: