JDBC set_approle

Я пытаюсь установить роль приложения через соединение JDBC с использованием prepareCall. Кажется, он работает нормально (то есть с синтаксисом), но SQL Server 2008 возвращает эту ошибку:

Application roles can only be activated at the ad hoc level

Я не запускаю это из хранимой процедуры или чего-то другого, только непосредственно из моего соединения JDBC, как такового:

CallableStatement cstmt = con.prepareCall("{call sys.sp_setapprole(?, ?, ?, ?)}");
//setup all the IN and OUT parameters here
cstmt.execute();

Есть идеи, почему это не работает?

2 ответа

Решение

Оказывается, что драйвер JDBC, который я использовал, драйвер JDBC от Microsoft, не имеет возможности отключить подготовленные операторы или пул операторов. Таким образом, все, что было отправлено в базу данных, было заключено в sp_prepexec(), который обнаружил sys.sp_setapprole() и который ему не понравился, поскольку он не может быть заключен в другую процедуру и должен выполняться самостоятельно непосредственно в базе данных. К сожалению, решение состоит в том, чтобы использовать другой драйвер JDBC.

Используйте следующий код, чтобы выполнить sp_setapprole, это мне подходит!

// substitute userName and password with your own code
try {
  String sql = "EXEC sp_setapprole '" + userName + "', '" + password + "'";
  Statement st = con.createStatement();
  st.execute(sql);
} catch (Exception ex) {
  ex.printStackTrace();
}
Другие вопросы по тегам