Запитване към SQL Server за намиране на всички разрешения/достъп за всички потребители в дадена база данни
Бих искал да напиша заявка в sql 2008, която да отчете всички потребители, които имат достъп до определена база данни или обекти в базата данни, като таблици, изгледи и съхранени процедури, директно или чрез роли и т.н. Този отчет ще се използва за целите на одита на сигурността. Не съм сигурен дали някой има заявка, която да отговаря напълно на моите нужди, но се надявам да има нещо, което да ми даде добро начало. Може да се използва или sql 2008, 2005 или 2000, вероятно мога да конвертирам, ако е необходимо.
180
3
Това е моят първи опит за запитване, базиран на предложенията на Andomar. Тази заявка има за цел да предостави списък с разрешенията, които даден потребител е приложил директно към потребителския си акаунт или чрез ролите, които потребителят има.
От SQL Server 2005 нататък можете да използвате системни изгледи за тази цел. Например тази заявка показва списък на всички потребители в дадена база данни с техните права:
Имайте предвид, че даден потребител може да има права и чрез роля. Например ролята
db_data_reader
дава права заselect
на повечето обекти.Не мога да коментирам приетия отговор, така че ще добавя някои коментари тук:
sys.objects
съдържа само обекти, свързани със схеми. Така че, за да получите информация за "обекти от по-високо ниво" (т.е. схеми в нашия случай), трябва да използвате таблицатаsys.schemas
.[ObjectType]
е'по-добре да използватеobj.type_desc
само за класа на разрешениеOBJECT_OR_COLUMN
. За всички останали случаи използвайтеperm.[class_desc]
IMPERSONATE
. За да получите информация за имперсонациите, трябва да направитеLEFT JOIN
сsys.database_principals
поperm.major_id = imp.principal_id
sys.login_token
сsys.server_principals
, тъй като това ще покаже и SQL логините, а не само тези на Windows'G'
към разрешените типове главни, за да се разрешат групите Windowssys
иINFORMATION_SCHEMA
от получената таблица, тъй като тези потребители се използват само за обслужванеЩе публикувам първата част от скрипта с всички предложени поправки, другите части също трябва да бъдат променени: