GRANT, DENY i kolumny tabeli

Model uprawnień SQL Server stosuje kaskadowe dziedziczenie uprawnień. To znaczy, że uprawnienia nadane na wyższym poziomie automatycznie obowiązują na poziomach niżej. Pełna ścieżka dziedziczenia to:

  1. Instancja
  2. Baza danych
  3. Schemat
  4. Element schematu (tabela, widok, procedura, funkcja)
  5. Kolumna (w przypadku tabel i widoków)

W modelu uprawnień jest dodatkowo przyjęta zasada, że DENY jest ważniejsze niż GRANT. Czyli np. DENY na poziomie schematu powoduje brak dostępu do wszystkich obiektów w schemacie – nawet jeśli do elementu schematu przypisano wprost uprawnienie za pomocą GRANT. Dotyczy to wszystkich obiektów, poza kolumnami.

Czytaj dalej

Reklamy

Konto usługi SQL Server: WMI Provider error

A dokładniej: „WMI Provider error: This parameter is incorrect. [0x80070057]”. Błąd pojawił się w momencie zmiany konta serwisowego dla usługi SQL Server Agent za pomocą narzędzia Sql Server Configuration Manager.

sqlserversqlagentserviceerror

Pierwsza myśl – coś się stało z WMI i może trzeba będzie przebudować repozytorium (np. jak tu: https://blogs.technet.microsoft.com/askperf/2009/04/13/wmi-rebuilding-the-wmi-repository/) . Ale zmiana innego konta zadziałała bez zarzutu.

Problem pojawiał się tylko dla tego jednego konta – bez względu na to czy chciałem ustawić dla usługi konto domenowe, czy wirtualne zawsze pojawiał się ten sam błąd. Szukając więcej na temat błędu trafiłem na stronę WMI Error Constants w MSDN, gdzie napisano że to wcale nie błąd WMI tylko systemowy:

0x8007xxxx
Errors originating in the core operating system. WMI may return this type of error because of an external failure, for example, DCOM security failure.

Zatem przebudowa repozytorium WMI odpada, bo zupełnie nic nie da w tym przypadku. Ten sam numer błędu występuje także przy innych sytuacjach, np kopiach zapasowych, czy np. zdalnym wywołaniu sesji WMI na innym komputerze.

W kilku linkach przy wyszukiwaniu rozwiązania znalazłem sugestię, żeby zmienić ustawienia konta nie za pomocą Sql Server Configuration Managera, tylko standardowo przez konfigurację z poziomu Panel sterowania > Narzędzia administracyjne > Usługi.

I mimo że zawsze podkreśla się, żeby do zmian ustawień usług korzystać tylko z programu Sql Server Configuration Manager – zmiana konta w standardowym oknie konfiguracyjnym usługi zadziałała – mogłem bez problemu ustawić konto domenowe dla usługi.

Okazało się, że konto Local System zostało wcześniej ustawione właśnie przez zwykłą edycję usługi w narzędziach administracyjnych i próba zmiany z poziomu konfiguratora usług SQL Server nie dawała rezultatu.

Wniosek: czym się strułeś, tym się lecz. Jeśli zmieniasz parametry usługi nie tak jak trzeba, to odwróć potem sytuację też nie tak jak trzeba.

FOR XML PATH i atrybut

To jest wpis z rodzaju „dopadło mnie zaćmienie, jak kiedyś będę miał znów problem to zajrzę na bloga, czy nie pisałem na ten temat”.

Przy tworzeniu dokumentu XML za pomocą FOR XML PATH możemy podać nazwę elementu, który ma „opakowywać” każdy zwracany rekord (jeśli nie podamy będzie domyślne <row>). A co jeśli potrzebujemy dodać atrybut do elementu „opakowującego”? Czytaj dalej

Podłącz się do SQL Server na lokalnej maszynie wirtualnej Virtualbox

W ramach funkcjonalności kontrolki SSIS będziemy wykorzystywać SQL Server jako bazę dla tabel pomocniczych przechowujących informacje o plikach na serwerze, metadane przetwarzań i listę plików do pobrania. W tym celu pomyślałem, żeby wykorzystać jedną z maszyn wirtualnych postawionych na Virtualbox. System operacyjny maszyny to Windows 2012 R2 Standard z zainstalowanym SQL Server 2016 CTP3 jako instancją nazwaną. Co teraz trzeba zrobić, żeby połączyć się z systemu głównego/ gospodarza(?) (host) do systemu gościa (guest)?
Czytaj dalej

Trick (?) z processing-instruction()

Całkiem niedawno szukając materiałów na temat przetwarzania XML znalazłem opis pewnego tricku: jeśli chcesz ładnie wyświetlić wielolinijkowy tekst wyświetlany w SSMS w siatce wyników – zastosuj taki kawałek kodu:

SELECT SomeCol AS 'processing-instruction(q)'
FROM Whatever
FOR XML PATH(''), TYPE

I tyle. Akurat ten fragment pochodzi ze strony Davida Wentzela, ale widziałem go u kilku innych osób.

No super, ale dlaczego tak i co to w ogóle oznacza? Czemu działa? I co pokazuje?
Czytaj dalej

Własna kontrolka SSIS, część 1

Skoro znamy już wymagania i z grubsza zakres pomyślmy jak podejść do tematu własnej kontrolki. Opcji mamy mnóstwo, ale weźmy pod uwagę dwie:

  • albo patrzymy co mamy i bierzemy pod uwagę, że da się to usprawnić
  • albo wymyślamy koło na nowo

Wybieram bramkę numer jeden. Przyjrzę się co mam teraz i przy dalszej analizie może wyciągnę wnioski co poprawić, co wyciąć, co dodać i może będzie tak, że z początkowego pomysłu zostanie nic. Albo i nic nie zostanie.

Co mamy?

Obecne rozwiązanie przypomina czasem coś co się trzyma na ślinę, sznurek i kawałek taśmy klejącej. Ale działa. Do tego działa dobrze (rzecz jasna o ile nie wystąpią błędy) i nawet da się popatrzeć co się działo po kolei. W końcu prowizorki są najtrwalsze. Czytaj dalej

Własna kontrolka SSIS, część 0

Zadanie jest stosunkowo proste

Słuchaj, bo to jest tak. Na serwer FTP wpadają pliki. Musimy je pobrać do siebie i zasilić bazę danymi. Z tych plików właśnie. No.” Proszę bardzo. Wykorzystujemy do tego SSIS (dla punktu zaczepienia przyjmijmy wersję 2012). Możemy do tego wykorzystać standardową kontrolkę FTP z SSIS. Przeciągamy co trzeba, konfiguracja, kilka poprawek, test i działa – mamy pliki u siebie. Czas na kawę #2.
Czytaj dalej