JDBC set_approle - PullRequest
       22

JDBC set_approle

2 голосов
/ 26 июля 2011

Я пытаюсь установить роль приложения через соединение 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 ]

2 голосов
/ 18 ноября 2013

Используйте следующий код для выполнения 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();
}
1 голос
/ 04 августа 2011

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

...