Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitikai Platform System (PDW)
SQL adatbázis a Microsoft Fabric-ben
A metaadatok láthatósága olyan biztonságos adatokra korlátozódik, amelyek tulajdonosa egy felhasználó, vagy amelyeken a felhasználó engedélyt kapott.
Az alábbi lekérdezés például visszaad egy sort, ha a felhasználó egy engedélyt ad, például SELECT vagy INSERT, a táblán myTable.
SELECT name, object_id
FROM sys.tables
WHERE name = N'myTable';
GO
Ha azonban a felhasználó nem rendelkezik engedéllyel myTable, a lekérdezés üres eredményhalmazt ad vissza.
A metaadatok láthatósági konfigurációjának hatóköre és hatása
A metaadatok láthatósági konfigurációja csak a következő biztonságos eszközökre vonatkozik:
- Katalógusnézetek
- Beépített függvényeket feltáró metaadatok
- Kompatibilitási nézetek
- Adatbázismotor
sp_helptárolt eljárásai - Információs sémanézetek
- Kiterjesztett tulajdonságok
A metaadatok láthatósági konfigurációja nem vonatkozik a következő biztonságos eszközökre:
- Szállítási rendszertáblák naplózása
- Adatbázis-karbantartási terv rendszertáblái
- Replikációs rendszertáblák
- SQL Server Agent rendszertáblák
- Rendszertáblák biztonsági mentése
- Replikációs és SQL Server-ügynök
sp_helpáltal tárolt eljárások
A metaadatok korlátozott hozzáférhetősége a következőket jelenti:
- Előfordulhat, hogy a rendszernézetek lekérdezései csak a sorok egy részhalmazát, vagy néha üres eredményhalmazt ad vissza.
- A metaadatokat kibocsátó beépített függvények, mint például az OBJECTPROPERTYEX, visszaadhatnak
NULL. - Az adatbázismotor
sp_helptárolt eljárások csak a sorok egy részhalmazát vagyNULLadhatnak vissza. - Ennek eredményeképpen a nyilvános metaadatok hozzáférését feltételező alkalmazások megszakadnak.
Az SQL-modulok, például a tárolt eljárások és az eseményindítók a hívó biztonsági környezetében futnak, ezért korlátozott metaadat-hozzáféréssel rendelkeznek. Ha például a következő kódban a tárolt eljárás megpróbálja elérni annak a táblának a metaadatait, myTable amelyen a hívó nem rendelkezik jogosultságokkal, a rendszer üres eredményhalmazt ad vissza. Az SQL Server korábbi kiadásaiban a rendszer egy sort ad vissza.
CREATE PROCEDURE assumes_caller_can_access_metadata
BEGIN
SELECT name, object_id
FROM sys.objects
WHERE name = N'myTable';
END;
GO
Ha engedélyezni szeretné a hívók számára a metaadatok megtekintését, engedélyt adhat a hívóknak VIEW DEFINITION , vagy az SQL Server 2022 (16.x) és újabb verzióiban, vagy VIEW SECURITY DEFINITIONVIEW PERFORMANCE DEFINITION egy megfelelő hatókörben: objektumszinten, adatbázisszinten vagy kiszolgálószinten. Ezért az előző példában, ha a hívó rendelkezik VIEW DEFINITION engedéllyel myTable, a tárolt eljárás egy sort ad vissza. További információ: GRANT és GRANT adatbázisengedélyek.
A tárolt eljárást úgy is módosíthatja, hogy az a tulajdonos hitelesítő adatai alapján legyen végrehajtva. Ha az eljárás tulajdonosa és a táblatulajdonos ugyanaz a tulajdonos, a tulajdonjogi láncolás érvényes, és az eljárástulajdonos biztonsági környezete lehetővé teszi a myTablemetaadatainak elérését. Ebben a forgatókönyvben a következő kód egy metaadatsort ad vissza a hívónak.
Jegyzet
Az alábbi példa a sys.objects katalógusnézetet használja a sys.sysobjects kompatibilitási nézet helyett.
CREATE PROCEDURE does_not_assume_caller_can_access_metadata
WITH EXECUTE AS OWNER
AS
BEGIN
SELECT name, object_id
FROM sys.objects
WHERE name = N'myTable';
END
GO
Jegyzet
A EXECUTE AS segítségével ideiglenesen átválthat a hívó biztonsági környezetére. További információ: EXECUTE AS.
A metaadatok láthatósági konfigurációjának előnyei és korlátai
A metaadatok láthatóságának konfigurálása fontos szerepet játszhat az általános biztonsági tervben. Vannak azonban olyan esetek, amikor egy képzett és határozott felhasználó kényszerítheti bizonyos metaadatok közzétételét. Javasoljuk, hogy a metaadat-engedélyeket a számos részletes védelem egyikeként telepítse.
Elméletileg kényszeríthető a metaadatok kibocsátása a hibaüzenetekben a predikátumok kiértékelési sorrendjének módosításával a lekérdezésekben. Az ilyen próba- és hibatámadások lehetősége nem az SQL Serverre jellemző. Ezt a relációs algebra által megengedett asszociatív és ingmutatív transzformációk sugallják. Ezt a kockázatot a hibaüzenetekben visszaadott információk korlátozásával csökkentheti. A metaadatok láthatóságának további korlátozásához indítsa el a kiszolgálót a 3625-ös nyomkövetési jelzővel. Ez a nyomkövetési jelző korlátozza a hibaüzenetekben megjelenő információk mennyiségét. Ez viszont segít megelőzni a kényszerített közzétételeket. A kompromisszum az, hogy a hibaüzenetek tömörek, és lehet, hogy nehéz őket hibakeresési célokra használni. További információ: Database Engine Service indítási beállítások és nyomkövetési jelzők.
A következő metaadatok nem tartoznak kényszerített közzététel hatálya alá:
A
provider_stringsys.serversoszlopában tárolt érték. Az engedéllyel nem rendelkezőALTER ANY LINKED SERVERfelhasználó egyNULLértéket lát ebben az oszlopban.Felhasználó által definiált objektumok forrásdefiníciója, például tárolt eljárás vagy eseményindító. A forráskód csak akkor látható, ha az alábbi feltételek egyike igaz:
A felhasználó rendelkezik
VIEW DEFINITIONengedéllyel az objektumra.A felhasználó nem kapott engedélyt
VIEW DEFINITIONaz objektumra, és rendelkezikCONTROL,ALTERvagyTAKE OWNERSHIPengedéllyel az objektumon. Minden más felhasználó látjaNULL.
A definícióoszlopok a következő katalógusnézetekben találhatók:
sys.all_sql_modulessys.server_sql_modulessys.default_constraintssys.numbered_proceduressys.sql_modulessys.check_constraintssys.computed_columns
A
ctextoszlop asyscommentskompatibilitási nézetben.A
sp_helptexteljárás kimenete.Az információs séma nézeteinek alábbi oszlopai:
INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSEINFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULTINFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITIONINFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION
OBJECT_DEFINITION()funkcióA
password_hashsys.sql_loginsoszlopában tárolt érték. Azok a felhasználók, akik nem rendelkeznekCONTROL SERVER, vagy az SQL Server 2022 (16.x) és újabb verzióiban aVIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITIONengedéllyel, aNULLértéket látják ebben az oszlopban.
A beépített rendszereljárások és függvények SQL-definíciói nyilvánosan láthatók a sys.system_sql_modules katalógusnézet, a sp_helptext tárolt eljárás és a OBJECT_DEFINITION() függvény segítségével.
Jegyzet
A rendszer által tárolt eljárás sp_helptext nem támogatott az Azure Synapse Analyticsben. Ehelyett használja az sys.sql_modules objektumkatalógus nézetet.
A metaadatok láthatóságának általános alapelvei
A metaadatok láthatóságával kapcsolatban az alábbi általános alapelveket érdemes figyelembe venni:
- Rögzített szerepkörök implicit engedélyei
- Engedélyek hatóköre
- A precedencia
DENY - Az alkomponens metaadatainak láthatósága
Rögzített szerepkörök és implicit engedélyek
A rögzített szerepkörök által elérhető metaadatok a hozzájuk tartozó implicit engedélyektől függnek.
Engedélyek hatóköre
Az egy hatókörhöz tartozó engedélyek azt jelentik, hogy a metaadatok az adott hatókörben és minden zárt hatókörben láthatók. Egy sémára vonatkozó engedély például azt jelenti, SELECT hogy a jogosult rendelkezik SELECT engedéllyel az adott séma által tartalmazott összes biztonságos adatra. A séma engedélyének SELECT megadása lehetővé teszi a felhasználó számára a séma metaadatainak, valamint a benne található táblák, nézetek, függvények, eljárások, üzenetsorok, szinonimák, típusok és XML-sémagyűjtemények megtekintését. További információkat a hatókörökről az Engedélyhierarchiában (adatbázis-motor)talál.
Jegyzet
Az UNMASK engedély nem befolyásolja a metaadatok láthatóságát: önmagában az UNMASK engedélyezés nem fedi fel a metaadatokat.
UNMASK mindig SELECT engedéllyel kell rendelkeznie ahhoz, hogy bármilyen hatása legyen. Példa: az adatbázis hatókörének megadása UNMASK és az egyes táblákon való engedélyezés SELECT eredménye, hogy a felhasználó csak annak az egyéni táblának a metaadatait látja, amelyből kiválasztható, más táblát nem.
A DENY elsőbbsége
DENY általában elsőbbséget élvez más engedélyekkel szemben. Ha például egy adatbázis-felhasználó engedélyt kap EXECUTE egy sémára, de az adott sémában tárolt eljáráshoz megtagadták EXECUTE az engedélyt, a felhasználó nem tekintheti meg a tárolt eljárás metaadatait.
Ezenkívül ha egy felhasználó nem rendelkezik EXECUTE engedéllyel egy sémához, de EXECUTE a sémában tárolt eljáráshoz kapott engedélyt, a felhasználó nem tekintheti meg a tárolt eljárás metaadatait.
Egy másik példa, ha egy felhasználó kapott és megtagadott EXECUTE engedélyt egy tárolt eljáráshoz, amely a különböző szerepkör-tagságokon keresztül lehetséges, elsőbbséget élvez, DENY és a felhasználó nem tudja megtekinteni a tárolt eljárás metaadatait.
Az alkomponens metaadatainak láthatósága
Az alösszetevők, például az indexek, az ellenőrzési korlátozások és az eseményindítók láthatóságát a szülő engedélyei határozzák meg. Ezek az alösszetevők nem rendelkeznek engedélyezhető engedélyekkel. Ha például egy felhasználó engedélyt kapott egy táblára, a felhasználó megtekintheti a táblák, oszlopok, indexek, ellenőrzési korlátozások, eseményindítók és más ilyen alösszetevők metaadatait. Egy másik példa a jog megadására csak egy adott oszlopra egy táblán belül: SELECT ez lehetővé teszi a kedvezményezett számára, hogy megtekintse a teljes tábla metaadatait, beleértve az összes oszlopot is. Ennek egyik módja, hogy az VIEW DEFINITION engedély csak entitásszinten működik (ebben az esetben a tábla), és nem érhető el alhálózati listákhoz (például oszlop- vagy biztonsági kifejezésekhez).
A következő kód ezt a viselkedést mutatja be:
CREATE TABLE t1
(
c1 INT,
c2 VARCHAR
);
GO
CREATE USER testUser WITHOUT LOGIN;
GO
EXECUTE AS USER = 'testUser';
SELECT OBJECT_SCHEMA_NAME(object_id),
OBJECT_NAME(object_id),
name
FROM sys.columns;
SELECT * FROM sys.tables;
-- this returns no data, as the user has no permissions
REVERT;
GO
-- granting SELECT on only 1 column of the table:
GRANT SELECT ON t1 (c1) TO testUser;
GO
EXECUTE AS USER = 'testUser';
SELECT OBJECT_SCHEMA_NAME(object_id),
OBJECT_NAME(object_id),
name
FROM sys.columns;
SELECT * FROM sys.tables;
-- this returns metadata for all columns of the table and the table itself
;
REVERT;
GO
DROP TABLE t1;
DROP USER testUser;
Az adatbázis minden felhasználója számára elérhető metaadatok
Bizonyos metaadatoknak elérhetőnek kell lenniük egy adott adatbázis összes felhasználója számára. A fájlcsoportok például nem rendelkeznek átruházható engedélyekkel; Ezért a felhasználó nem kaphat engedélyt a fájlcsoport metaadatainak megtekintésére. Azonban minden olyan felhasználónak, aki létrehozhat egy táblát, hozzá kell férnie a fájlcsoport metaadataihoz a ON <filegroup> utasítás TEXTIMAGE_ON <filegroup> vagy CREATE TABLE záradékainak használatához.
A függvények által DB_ID()DB_NAME() visszaadott metaadatok minden felhasználó számára láthatók.
Ez azoknak a katalógusnézeteknek a listája, amelyek a nyilvános szerepkör számára láthatók.
sys.allocation_unitssys.column_type_usagessys.configurationssys.data_spacessys.database_filessys.destination_data_spacessys.filegroupssys.messagessys.parameter_type_usagessys.partition_functionssys.partition_range_valuessys.partition_schemessys.partitionssys.schemassys.sql_dependenciessys.type_assembly_usages