konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

Mam instalację Drupala 7 i chciałbym uwierzytelniać użytkowników za pomocą zewnętrznego serwera MSSQL, który przechowuje dane pracowników firmy (jest tam m.in.: nr pracownika, jako login; hasło używane w innym wewnętrznym systemie). Na początku ma to pozwolić konkretnym użytkownikom edytować treści na stronie w Drupalu, a docelowo ma pozwolić na zbudowanie Intranetu dla pracowników (treści dostępne po zalogowaniu).

Zastanawiam się jak to zrobić najlepiej, żeby cały mechanizm miał ręce i nogi. Z przemyśleń i przeprowadzonego researchu wyłaniają się 2 drogi:

1. Stworzyć centralny system uwierzytelnień, który z punktu widzenia przyszłości jest kuszący, bo inne systemy będzie można z nim integrować. Kwestią problematyczną tego rozwiązania jest stworzenie czegoś pośredniczącego w komunikacji między systemem a bazą MSSQL. Jakimś wyjściem jest tutaj LDAP. Pytanie jak zasilić LDAP'a danymi z bazy MSSQL, żeby odpytując LDAP'a z poziomu Drupala (PHP) uzyskać dane z MSSQL, co w konkretnym przypadku weryfikacji loginu i hasła pozwoli uwierzytelnić użytkownika?

2. Użyć bezpośredniego połączenia z MSSQL z poziomu Drupala (PHP) i zwykłym SELECTem sprawdzić czy login i hasło są poprawne? Jest to jakieś wyjście, ale tylko dla tej konkretnej strony www w Drupalu.

W obu przypadkach problematyczna wydaje się też kwestia ról i uprawnień. Są one specyficzne dla Drupala i muszą być przechowywane w jego strukturze. Inaczej mówiąc, nawet majac mechanizm uwierzytelnienia potrzebny jest jeszcze mechanizm autoryzacji, czyli powiązanie użytkownika z zewnętrznej bazy z rolami i uprawnieniami w Drupalu. Jak to zrobić?Ten post został edytowany przez Autora dnia 19.07.13 o godzinie 00:14
Nikodem Dobrzański

Nikodem Dobrzański Architekt systemu,
BizTech Konsulting
S.A.

Temat: Zasilenie LDAP danymi z bazy MSSQL

Czekaj, czekaj, trochę zakręcone. Od drugiej strony.
W MSSQL można trzymać dane autentykacyjno - autoryzacyjne. A konkretnie parę login - token hasła (a nie hasło). Token jest wyliczany na podstawie hasła, zapomnij o czymś tak prostym, jak MD5. Porównywane są loginy i tokeny. Co więcej, jako Administrator, nie powinieneś znać haseł użytkowników, wpisanych jawnym ciągiem znaków.
Dane możesz trzymać w jednym z punktów:
- tablica w bazie
- autentykacja SQL na serwerze baz danych
- autentykacja Windows na serwerze baz danych

Z rolami podobnie, też można trzymać je w bazie, a użytkownicy, przy pomocy dodatkowej kolumny i powiązaniu kluczem obcym od razu mają zdefiniowaną rolę.

W tym ostatnim przypadku jesteś w stanie, przy odpowiedniej konfiguracji serwera baz danych MSSQL, móc zarządzać zasobami w samym systemie operacyjnym. Bądź też, wyzwalaczami, tworzyć pliki LDAP z bazy, nadpisywać i dystrybuować.

Jeszcze jedna, bardzo ważna kwestia: NIE dla SELECT. To musi być procedura składowana, ponieważ przy tym pierwszym jest dużo większe prawdopodobieństwo wystąpienia SQL Iniection, po drugie serwer mssql musi za każdym razem wyliczać plan wykonania zapytania. W procedurze składowanej masz za to ścisłą kontrolę typów oraz fakt, że po pierwszym uruchomieniu serwer zapisuje plan wykonania i przy następnych wywołaniach bezpośrednio wykonuje już procedurę składowaną.
Nie wiąż także aplikacji z tablicą, zawsze wyprowadzaj widok/funkcję/procedurę i dopiero z niego korzystaj. Unikniesz wtedy przebudowy połowy aplikacji, gdy będziesz potrzebował zmienić coś w samej tablicy.Ten post został edytowany przez Autora dnia 19.07.13 o godzinie 08:06

konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

Sprawy haseł to nie w tym temacie proszę. Nie o to chodzi i napisałem "hasło", żeby było łatwiej zrozumieć o co chodzi.

Nie jestem ekspertem od MSSQL i LDAPa. Potrzebuję wiedzy i/lub pomysłu jak z aplikacji w PHP na Drupalu dobrać się do bazy użytkowników znajdującej się na serwerze MSSQL. Jakimś wyjściem jest tutaj LDAP co pozwoli zbudować na tej podstawie SSO - stąd moje pytanie - jak zasilić go danymi? Dodam tylko, że nie jestem adminem bazy mssql, mogę mieć do niej dostęp jako źródła danych, ale nie ich modyfikacji, no chyba, że zmiana hasła.Ten post został edytowany przez Autora dnia 19.07.13 o godzinie 08:30

konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

dziwna kombinacja alpejska
czemu nie ma loginów i haseł w kontrolerze domeny i względem tego się nie autoryzuje userów zarówno w MSSQL-u jaki PHP?
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Zasilenie LDAP danymi z bazy MSSQL

Jeśli chodzi o import danych do LDAPa (ActiveDirectory/OpenLDAP/..) to:
a) generujesz dane w formacie LDIF
b) wciągasz dane do LDAPa

Dla Active Directory opisane np. na http://support.microsoft.com/kb/237677/pl

Czy wszystkich użytkowników masz w LDAP / MSSQL ?

Który system jest masterem ? np. zmieniasz wartość jakiegoś atrybutu dla użytkownika, to jak będzie wyglądała synchronizacja z pozostałymi systemami?

konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

Taka to kombinacja alpejska, że nie mam wpływu na tą centralną bazę pracowników. Mogę tylko z niej skorzystać, żeby na początku nie budować kolejnej bazy loginów i haseł, a docelowo ma to być intranet. Nie jestem jedynym informatykiem, ba... nawet nie jestem adminem tylko programistą. Nie tworze sam całości rozwiązań (ciężko by było).

Jest zbyt wiele niezależnych usług, żeby myśleć o centralnym kontrolerze domeny. Nie wszyscy są w AD. To kwestie nie do przeskoczenia i nie chciałbym dyskutować na ten temat. Ot tak jest i tyle - takie warunki, wiele stopni zależności służbowej, ciężko uzyskać jakieś decyzje, a zmiany rewolucyjne to już najgorzej.

Jak już wspomniałem wcześniej, nie jestem adminem, nie jestem specem od usług MS, a tym bardziej od MSSQL czy AD lub LDAP. Zależy mi na jak najprostszym i najszybszym wdrożeniu :)
Paweł Grzegorz K.:
Jeśli chodzi o import danych do LDAPa (ActiveDirectory/OpenLDAP/..) to:
a) generujesz dane w formacie LDIF
b) wciągasz dane do LDAPa

Dla Active Directory opisane np. na http://support.microsoft.com/kb/237677/pl

@Paweł Grzegorz Kwiatkowski - dzięki wielkie, jak na razie to pierwsza odpowiedź, która zapala światełko w tunelu.

Czy wszystkich użytkowników masz w LDAP / MSSQL ?
W MSSQL mam coś w rodzaju bazy kadrowej, którą wykorzystuje inny wewnętrzny system. Chciałbym to wykorzystać jako bazę userów serwisu www. Niestety nie ma tam wszystkich osób, które sa w centrum zainteresowania - dlatego musi byc rodzaj miksowania: co się da to z MSSQL, a jak nie ma kogo wziąć to user z Drupala.
Który system jest masterem ? np. zmieniasz wartość jakiegoś atrybutu dla użytkownika, to jak będzie wyglądała synchronizacja z pozostałymi systemami?
MSSQL ma największą ilość danych więc on byłby podstawą SSO, ale nie wykluczam innych źródeł danych, dlatego LDAP, żeby zasilać go z wielu źródeł - w miarę potrzeb i niezależnie od systemów go odpytujących.Ten post został edytowany przez Autora dnia 19.07.13 o godzinie 13:22

konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

a odpytanie MSSQL-a za pomocą PHP?
FREE TDS działa u mnie całkiem ok na Linux z MSSQL 2008 R2

konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

Przemysław R.:
a odpytanie MSSQL-a za pomocą PHP?
FREE TDS działa u mnie całkiem ok na Linux z MSSQL 2008 R2

Napisałem już, że jest to jedno z możliwych wyjść, ale to gorsze, bo rozwiązuje sprawę tylko dla aplikacji w PHP (Drupal). Są zakusy, żeby stworzyć centralne SSO (Single Sign-On) i takie rozwiązanie wtedy odpada. Stąd pomysł na pośrednika w postaci LDAPa - tu jednak problemem jest poziom mojej wiedzy na jego temat :)
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Zasilenie LDAP danymi z bazy MSSQL

Skoro sytuacja wygląda tak, że:
a) masz wiele źródeł w oparciu o które możesz uwierzytelniać użytkowników
b) nie chcesz tworzyć kolejnego źródła uwierzytelniania
c) chcesz integrować rozwiązanie z Drupalem
d) potencjalnie przygotować się do Single Sign On

To może rozważ dodatkowy komponent, który załatwiałby sprawy SSO i integrował z Drupalem :-)

Jest coś takiego co nazywa się CAS http://www.jasig.org/cas i umożliwia podpięcie wielu źródeł uwierzytelniania https://wiki.jasig.org/display/CASUM/3.1.+System+Integr....

Drupal pewnie ma jakiś komponent, który gada z CASem via phpCAS.Ten post został edytowany przez Autora dnia 19.07.13 o godzinie 13:27

konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

Czyli sugerujesz zamiast LDAPa, użyć CAS jako Single Sign-On?
I do niego podpiąć takie źródła jak wspomniana baza pracowników w MSSQL oraz inne pozostałe, których nie jestem w stanie teraz wymienić, ale są.
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Zasilenie LDAP danymi z bazy MSSQL

Sebastian Z.:
Czyli sugerujesz zamiast LDAPa, użyć CAS jako Single Sign-On?

Nie znam specyfiki środowiska, w którym rozgrywa się akcja, ale z tego co piszesz, to rozważyłbym CASa albo zamienniki SSO, zamiast jedynie LDAP.

Chyba, że jest już Active Directory z kompletem danych, ale np. nie jesteś tego świadom :)

konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

Paweł Grzegorz K.:
Sebastian Z.:
Czyli sugerujesz zamiast LDAPa, użyć CAS jako Single Sign-On?

Nie znam specyfiki środowiska, w którym rozgrywa się akcja, ale z tego co piszesz, to rozważyłbym CASa albo zamienniki SSO, zamiast jedynie LDAP.

Chyba, że jest już Active Directory z kompletem danych, ale np. nie jesteś tego świadom :)
Jestem świadom, że nie ma AD i raczej nie będzie - prędzej LDAP powstanie.
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Zasilenie LDAP danymi z bazy MSSQL

No to jak LDAP powstanie to będzie można tam zmigrować użytkowników, a w CAS pozostawić tylko jedno źródło uwierzytelnienia.
Daniel W.

Daniel W. Architekt ;)

Temat: Zasilenie LDAP danymi z bazy MSSQL

przeciez AD to Ldap
Daniel W.

Daniel W. Architekt ;)

Temat: Zasilenie LDAP danymi z bazy MSSQL

przeciez AD to Ldap

konto usunięte

Temat: Zasilenie LDAP danymi z bazy MSSQL

AD to specyficzny rodzaj LDAP, ale AD mnie nie interesuje.



Wyślij zaproszenie do