За последние 24 часа нас посетили 21678 программистов и 1035 роботов. Сейчас ищут 715 программистов ...

Как подключиться к 2 БД под разными пользователями (На SQL только windows аутентификация)?

Тема в разделе "PHP для новичков", создана пользователем Feonix89, 31 июл 2018.

Метки:
  1. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    Имеется приложение на Laravel 5.6 PHP 7.2, работающее на IIS 7.5 сервере. Работает AD авторизация. Как пользователю выполнить запрос к БД MSSQL с Windows аутентификацией если есть 1 учетная запись (на выполнение запросов, что-то типа сервисной).
    Наверное проще на примере
    пользователь обычный\ивановвв под ним работает приложение
    пользователь сервисный\петроваа под ним выполнение запросов к БД
    как обычный\ивановвв может подключиться к БД используя данные сервисный\петроваа?
    Вариант запуска сервера от имени пользователя не предлагать :)
    Заранее большое спасибо!
     
  2. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Ну наверное в конфиге БД в ларке прописать доступ к БД?
     
  3. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    Ключевая фраза Windows аутентификация. Если бы была SQL то да, если ты указываешь логин и пароль для подключения к БД автоматически считается что для SQL аутентификации - в следствие чего ошибка доступа, а если не указываешь логин и пароль по умолчанию считается, что windows аутентификация и берутся данные из AD в частности я так думаю, что AUTH_USER или REMOTE_USER.
    P.S. возможно я не прав поправьте меня если это не так.
     
  4. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
  5. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    у меня включена windows аутентификация.
    если я указываю логин и пароль вот такая ошибка -
    "SQLSTATE[28000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'user_sv'."]
    та же ошибка если с доменом -
    "SQLSTATE[28000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'corp\user_sv'"]
    если не указыва логин и пароль -
    "SQLSTATE[28000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'CORP\user_1'. "]
    --- Добавлено ---
    если я отключаю windows аутентификацию на сервере и включаю анонимную от имени corp\user_sv все прекрасно работает. но такой вариант не нужен (т.к. может быть несколько таких кривых БД)
    --- Добавлено ---
    или я совсем ничего не понимаю :)
     
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    А windows умеет одновременно работать с несколькими пользователями?
     
  7. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    Nospiou если честно я не знаю. Я пока читал учебник по PHP мне встретилось такое выражение как
    define("AUTH_USER", "corp\user_sv") то есть подстановка значений. может быть можно прокинуть как нибудь данные с этой учетной записи. или при переходе на ссылку, которая отвечает за этот запрос к БД открывать браузер от имени этой учетной записи делать запрос и закрывать браузер? я просто новичек и не совсем понимаю как правильно это можно обыграть.
     
  8. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    PHP:
    1. 'sqlsrv' => [
    2.   'driver' => 'sqlsrv',
    3.   'host' => 'localhost',
    4.   'database' => ' ',
    5.   'username' => 'SERVICE_USER', // domain\service_user
    6.   'password' => ' ',
    7.   'charset' => 'utf8',
    8.   'prefix' => '',
    9. ],
     
  9. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    таже самая ошибка
     
  10. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    А юзер то заведёт?
     
  11. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    да, если я захожу под сервисной учеткой то все работает прекрасно
     
  12. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    Подскажите, если я сделаю 2 проекта:
    1 основной - будет с windows аутентификацией,
    2 - для получения данных из system center с запуском от имени пользователя.
    Оставляю во втором проекте:
    ExchangeController.php
    PHP:
    1. <?php
    2.  
    3. namespace App\Http\Controllers;
    4.  
    5. use App;
    6. use Illuminate\Http\Request;
    7. use App\ItActiveMySystemCenter;
    8. use Illuminate\Support\Facades\DB;
    9. use App\Http\Controllers\Controller;
    10. use Illuminate\Database\Eloquent\Model;
    11.  
    12. class ExchangeController extends Controller
    13. {
    14.     public function index()
    15.     {
    16.         $original_data = App\SystemCenter::getSystemCenterBigData();
    17.         $data = json_encode($original_data);
    18.         return $data;
    19.     }
    20. }
    Route.php
    PHP:
    1.     Route::get('exchange', 'ExchangeController@index')->name('exchange');
    и собственно модель SystemCenter с запросом.

    как мне принять в 1 проекте данные из ExchangeController?
    я попробовал что-то типа такого, но ошибка связанная с отсутствием переменной data
    Код (Javascript):
    1. <script>
    2.             var mass=[];
    3.             $.ajax({
    4.                 url:'http://localhost/Test_1/Connect_System_Center/exchange',
    5.                 type:'POST',
    6.                 dataType: 'json',
    7.                 data: data,
    8.                 success: function(data){
    9.                     if(data){
    10.                        console.log(data);
    11.                     }
    12.                 }
    13.             });
    14.             </script>
    Подскажите как можно реализовать такой момент и правильно ли это?
     
  13. Feonix89

    Feonix89 Новичок

    С нами с:
    30 май 2018
    Сообщения:
    113
    Симпатии:
    2
    Исправил в
    ExchangeController.php
    PHP:
    1. $original_data = App\SystemCenter::getSystemCenterBigData();
    2. $data = json_encode($original_data);
    3. return $data;
    Код (Javascript):
    1. var mass=[];
    2.             $.ajax({
    3.                 url:'http://localhost/Test_1/Connect_System_Center/exchange',
    4.                 type:'GET',
    5.                 dataType: 'json',
    6.                 success: function(data){
    7.                     //if(data){
    8.                        console.log(data);
    9.                     //}
    10.                 }
    11.             });
    12.             </script>