Гид по технологиям

Apache + MS SQL через внешнюю Java-авторизацию

• 4 min read • DevOps • Обновлено 27 Nov 2025
Apache + MS SQL через Java-авторизацию
Apache + MS SQL через Java-авторизацию

Код testConnection.java

Ниже — пример простого клиента, который Apache вызывает для проверки учётных данных пользователя. Код читает имя и пароль из stdin и пытается подключиться к MS SQL через драйвер jTDS.

import java.sql.*;
import java.io.*;
import java.text.*;
public class testConnection
{
      static InputStreamReader converter = new InputStreamReader (System.in);
      static BufferedReader      in = new BufferedReader (converter);
      // Read a String from standard system input
      public static String getString() {
        try {
            return in.readLine();
        } catch( Exception e ) {
            System.out.println("getString() exception, returning empty string");
            return "";
        }
      }
    public static void main(String[] args)
    {
      String userName;
      String userPass;
      // userName = args[0];
      userName = getString();
      // userPass = args[1];
      userPass = getString();
    DB db = new DB();
        db.dbConnect(
     "jdbc:jtds:sqlserver://xxx.xxx.xxx.xxx:1433/test",userName,userPass);
    }
}
class DB
{
    public DB() {}
    public void dbConnect(String db_connect_string,
  String db_userid, String db_password)
    {
        try
        {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            Connection conn = DriverManager.getConnection(
    db_connect_string, db_userid, db_password);
            System.out.println("connected");
          System.exit(0);
        }
        catch (Exception e)
        {
            //e.printStackTrace();
            System.out.println("failed");
          System.exit(1);
        }
    }
};

Краткие пояснения:

  • JDBC URL использует порт 1433 по умолчанию для MS SQL.
  • Драйвер: net.sourceforge.jtds.jdbc.Driver (jTDS). Убедитесь, что JAR драйвера в classpath при запуске.

Компиляция и упаковка

Скомпилируйте программу командой:

javac testConnection.java

Упакуйте в JAR с манифестом, указывающим главный класс:

jar cfm tc.jar manifest DB.class testConnection.class

Файл manifest должен содержать имя главного класса, например:

Main-Class: testConnection

Я скопировал tc.jar в /usr/local/testConn/.

Конфигурация Apache

Ниже — пример добавления внешней авторизации в конфиг Apache (/etc/apache2/default-server.conf):

AddExternalAuth archive_auth "/usr/lib/java/bin/java -jar /usr/local/testConn/tc.jar"
SetExternalAuthMethod archive_auth pipe

И пример секции директории в httpd.conf, чтобы применить эту авторизацию к каталогу /srv/www/htdocs/secretarea:


   Options Indexes FollowSymLinks
    AllowOverride None
    AuthType Basic
    AuthName "Autorizacija!"
    AuthExternal archive_auth
    Require valid-user

После перезапуска Apache при обращении к http://xxx.xxx.xxx.xxx/secretarea сервер запросит логин и пароль, передаст их программе tc.jar через stdin, программа проверит их в MS SQL и вернёт успех или отказ.

Как это работает

  1. Клиент (браузер) вводит учётные данные при Basic Auth.
  2. Apache запускает внешний процесс (наш JAR) и передаёт логин/пароль по каналу.
  3. JAR использует JDBC для подключения к MS SQL и проверяет учётные данные.
  4. JAR возвращает код завершения (0 — успех, >0 — отказ), и Apache решает, дать доступ или нет.

Важно: Apache не хранит пароль в открытом виде дольше, чем нужно, но JAR всё равно получает пароль на stdin. Минимизируйте логирование чувствительных данных.

Соображения по безопасности

  • Защитите файл JAR и каталог /usr/local/testConn от чтения посторонними.
  • Запускайте Java с минимальными правами, не от root.
  • По возможности используйте TLS/HTTPS, чтобы защитить Basic Auth на транспортном уровне.
  • Рассмотрите централизованную авторизацию (LDAP/AD) как альтернативу, если у вас масштабная инфраструктура.

Отладка и распространённые ошибки

  • ClassNotFoundException: драйвер jTDS не в classpath при запуске. Добавьте драйвер в java -cp или в системный classpath.
  • Неправильный путь к java в AddExternalAuth: проверьте полный путь до исполняемого java.
  • Сетевая ошибка: убедитесь, что сервер MS SQL доступен по указанному адресу и порту (обычно 1433).
  • Неправильный JDBC URL или формат базы данных: проверьте строку подключения.
  • Права SELinux/AppArmor или файловые права: проверьте логи и разрешения.

Примеры команд для проверки вручную:

echo -e "username\npassword" | /usr/lib/java/bin/java -jar /usr/local/testConn/tc.jar

Это имитирует вызов Apache и помогает локально проверить JAR.

Контрольный список внедрения

  • Скомпилирован testConnection.java и собран tc.jar.
  • Драйвер jTDS доступен Java (classpath).
  • tc.jar расположен в защищённом каталоге (/usr/local/testConn/).
  • Путь к java корректен в AddExternalAuth.
  • В конфигурации Apache добавлены AddExternalAuth и SetExternalAuthMethod.
  • Директория защищена настройками AuthExternal и Require valid-user.
  • Проверены сетевые настройки и доступ к MS SQL (порт 1433).
  • Включено TLS для защищённого обмена логином и паролем.

Критерии приёмки

  • Попытка доступа к /secretarea запрашивает логин и пароль.
  • При корректных учётных данных доступ разрешается.
  • При некорректных — доступ запрещён.
  • Логи не содержат открытых паролей.
  • Решение работает стабильно в течение тестового окна.

Альтернативы и улучшения

  • Использовать модуль авторизации, интегрированный с AD/LDAP (если есть необходимость централизованного управления).
  • Применить модуль mod_authn_dbd или другой модуль, если хотите хранить учётные данные в безопасной БД с пулом соединений.

Краткое резюме

Этот подход прост и позволяет переиспользовать существующую логику проверки учётных записей через JDBC. Он подходит для небольших инсталляций или миграционных сценариев. Для боевой эксплуатации учтите соображения безопасности и масштабируемости.

Примечание: перед развёртыванием в проде протестируйте работу под тем же пользователем, от которого запускается Apache, и проверьте права доступа к файлам и сети.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро