Я работаю над требованием, при котором я должен изменить пароль соединения оракула текущего пользователя из моего приложения.
Я обнаружил, что могу использовать следующую инструкцию для выполнения этой задачи с использованием SQL:
ALTER USER *username* IDENTIFIED BY *password*
Однако, поскольку имя пользователя и пароль не отправляются в базу данных в виде строк в кавычках, я не могу использовать параметры связывания. (Что также указано этим ответом)
У меня есть рабочее решение, когда я объединяю строку и отправляю ее как обычный SQL-запрос через мой экземпляр Entity Framework DbContext, например:
using (var context = _dbContextFactory.CreateContext())
{
await context.Database.ExecuteSqlCommandAsync(
$"ALTER USER {username} IDENTIFIED BY \"{newPassword}\"");
}
Недостатками этого подхода является то, что при объединении пароля в строке у меня возникают уязвимости в SQL-инъекциях, и пользователь не может использовать некоторые зарезервированные символы в своих паролях, например, например. ; и "
Меня не беспокоит параметр имени пользователя, поскольку он управляется внутри кода бэкэнда, однако пароль напрямую вводится пользователем.
Есть ли способ изменить пароль текущего пользователя в базе данных Oracle из C #, используя безопасный подход? Я также открыт для других подходов, таких как метод diffrent или создание хранимой процедуры в базе данных, при условии, что она может быть реализована в клиентском приложении C #.
Мы используем Oracle версии 12+, поэтому я не могу использовать синтаксис IDENTIFIED BY VALUES ''