sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2016

Vydání Community Technical Preview (CTP) SQL Serveru 2016 nám dalo příležitost vyzkoušet některé nové funkce, které budou dostupné v nadcházející verzi.

Dynamické maskování dat

Tato funkce umožňuje chránit důvěrná data před uživateli, kteří nemají oprávnění je vidět, zakrytím části nebo celého obsahu sloupce. Můžete například odkrýt část čísla kreditní karty, abyste pracovníkům technické podpory umožnili vidět poslední čtyři číslice; můžete se rozhodnout zcela skrýt údaje ve sloupci platů.

Pokud používáte SQL Server CTP 2.0, musíte spustit tento příkaz, abyste povolili dynamické maskování dat:

DBCC TRACEON(209,219,-1)

Tento příkaz nepoužívejte, pokud používáte novější verzi CTP, protože tím zakážete dynamické maskování dat. (Pokud používáte CTP 2.0 a neděláte spusťte tento příkaz DBCC nebo používáte CTP2.1+ a uděláte spusťte tento příkaz, při pokusu o definování dynamické masky pro sloupec se zobrazí chyba "Nesprávná syntaxe blízko 'masked'".

Následující SQL vytvoří tabulku, která používá dynamické maskování dat k zakrytí obsahu tří sloupců. Obsah CreditCard sloup jsou částečně odkryté. Co se zobrazí v Phone sloupec je ponechán dynamické datové masce. Výchozí pro sloupec řetězce je "xxxx". Výchozí hodnota pro číselný sloupec je "0". Email sloupec používá dynamickou datovou masku specificky zaměřenou na obsah tohoto sloupce.

CREATE TABLE Customer
  (ID int IDENTITY PRIMARY KEY,
   Name varchar(100) NOT NULL,
   CreditCard varchar(9) MASKED WITH (FUNCTION = 'partial(0,"xxxxx",4)') NULL,
   Phone varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,
   Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL);

INSERT INTO Customer VALUES('A Name', '111222333', '01937 860000', 
                            'someone@somedomain')

Pomocí isql program, který je součástí naší distribuce ovladačů SQL Server ODBC, se přihlásíme pomocí účtu SQL Server, který nemá oprávnění prohlížet obsah maskovaného sloupce:

$ /usr/local/easysoft/unixODBC/bin/isql.sh -v SQLSERVER_2016 myuser mypassword
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select * from customer
+----+-------+-----------+-------+---------------+
| ID | Name  | CreditCard| Phone | Email         |
+----+-------+-----------+-------+---------------+
| 1  | A Name| xxxxx2333 | xxxx  | [email protected] |
+----+-------+-----------+-------+---------------+

Poté se přihlásíme pomocí účtu, který má dostatečná oprávnění:

$ /usr/local/easysoft/unixODBC/bin/isql.sh -v SQLSERVER_2016 sa mypassword
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select * from customer
+----+-------+-----------+--------------+------------------------+
| ID | Name  | CreditCard| Phone        | Email                  |
+----+-------+-----------+--------------+------------------------+
| 1  | A Name| 111222333 | 01937 860000 | [email protected] |
+----+-------+-----------+--------------+------------------------+

Podpora JSON

JavaScript Object Notation (JSON) je textový formát, který usnadňuje výměnu dat. S tím, jak stále více vývojářů aplikací přijímá JSON jako preferovaný datový formát, roste potřeba databází kompatibilních s JSON. V důsledku toho si několik databází NoSQL zvolilo JSON jako svůj primární datový formát. Jednou z takových databází je MongoDB.

Na našich testovacích počítačích jsme použili podporu JSON SQL Server 2016 k výměně dat mezi SQL Serverem a MongoDB.

K exportu zákaznických dat, která jsme dříve vytvořili, jsme použili program pro hromadné kopírování (bcp), který je součástí naší distribuce ovladače SQL Server ODBC, ve formátu JSON. (Příkaz bcp se připojuje k serveru SQL jako „sa“, a tak jsou data v maskovaných sloupcích odhalena.)

$ cd /usr/local/easysoft/sqlserver/bcp
$ ./bcp  "select * from customer for json auto" queryout customer.json -U sa -c
Password:
Starting copy...
1 row successfully bulk-copied to host file. Total received: 1
Clock Time (ms.) Total     : 12129       Average : 0.082 rows per second
$ more customer.json
[{"ID":1,"Name":"A Name","CreditCard":"111222333","Phone":"01937 860000",
  "Email":"someone@somedomain"}]

Poté jsme importovali data JSON do MongoDB:

$ cd /opt/mongodb-linux-x86_64-ubuntu1404-3.0.7/bin
$ ./mongoimport --db=SQLServer --collection=Customer --file=customer.json --jsonArray
$ connected to: localhost
  imported 1 document
$ ./mongo
MongoDB shell version: 3.0.7
connecting to: test
> use SQLServer
switched to db SQLServer
> db.Customer.find()
{ "_id" : ObjectId("56334017f6df768ab87f2e8c"), "ID" : 1, "Name" : 
  "A Name", "CreditCard" : "111222333", "Phone" : "01937 860000",
  "Email" : "someone@somedomain" }
>

Zabezpečení na úrovni řádků

Díky své funkci zabezpečení na úrovni řádků je SQL Server 2016 schopen omezit přístup k datům řádků na základě přihlášení k serveru SQL. Zabezpečení na úrovni řádků je pro uživatele SQL Serveru transparentní, nevědí, že z výsledků dotazu jsou filtrovány řádky, které nemají oprávnění vidět.

Abychom tuto funkci vyzkoušeli s naším ovladačem SQL Server ODBC, reprodukovali jsme příklad zabezpečení na úrovni řádků od společnosti Microsoft. Udělali jsme to v databázi, která měla uživatele SQL Server s názvem "Sales1" a "Sales2", kteří mají SELECT privilegia.

Vytvořili jsme a naplnili tabulku s některými údaji o prodeji. SalesRep sloupec obsahuje uživatelské jméno příslušného obchodního zástupce.

CREATE TABLE Sales
(
  OrderID int,
  SalesRep sysname,
  Product varchar(10),
  Qty int
);

INSERT Sales VALUES 
(1, 'Sales1', 'Valve', 5), 
(2, 'Sales1', 'Wheel', 2), 
(3, 'Sales1', 'Valve', 4),
(4, 'Sales2', 'Bracket', 2), 
(5, 'Sales2', 'Wheel', 5), 
(6, 'Sales2', 'Seat', 5);

Zabezpečení na úrovni řádků je implementováno pomocí funkce s hodnotou tabulky, která vrací buď jeden řádek, pokud má uživatel odpovídající přístup, nebo žádné výsledky. V následujícím příkladu vrátí funkce s hodnotou tabulky řádek, pokud SalesRep sloupec je stejný jako uživatel provádějící dotaz.

CREATE SCHEMA Security;


CREATE FUNCTION Security.fn_securitypredicate(@SalesRep AS sysname)
    RETURNS TABLE
WITH SCHEMABINDING
AS
    RETURN SELECT 1 AS fn_securitypredicate_result 
WHERE @SalesRep = USER_NAME();

CREATE SECURITY POLICY SalesFilter
ADD FILTER PREDICATE Security.fn_securitypredicate(SalesRep) 
ON dbo.Sales
WITH (STATE = ON);

K připojení k databázi jako uživatel Sales2 jsme použili ovladač SQL Server ODBC. Zabezpečení na úrovni řádků zajišťuje, že tento uživatel může vidět pouze prodeje provedené uživatelem Sales2.

$ /usr/local/easysoft/unixODBC/bin/isql.sh -v SQLSERVER_2016 Sales2 mypassword
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select * from Sales
+------------+----------+-----------+-------+
| OrderID    | SalesRep | Product   | Qty   |
+------------+----------+-----------+-------+
| 4          | Sales2   | Bracket   | 2     |
| 5          | Sales2   | Wheel     | 5     |
| 6          | Sales2   | Seat      | 5     |
+------------+----------+-----------+-------+
SQL> select * from Sales where OrderID = 1
+------------+----------+-----------+-------+
| OrderID    | SalesRep | Product   | Qty   |
+------------+----------+-----------+-------+
|            |          |           |       |
+------------+----------+-----------+-------+

V databázi R

S koupí společnosti Microsoft Revolution Analytics, poskytovatele softwaru a služeb pro programovací jazyk R, jsou schopni integrovat R s SQL Server. SQL Server 2016 bude první verzí databáze, která bude obsahovat R, což umožní spouštění R kódu uvnitř databázového stroje SQL Server.

Pokud máte starší verzi SQL Server, alternativou je extrahovat data ze serveru SQL do R pomocí ODBC. Balíček RODBC poskytoval rozhraní ODBC pro R. Postavili jsme RODBC proti unixODBC Driver Manager, který je součástí distribuce našeho ovladače SQL Server, a poté jsme získali některá data SQL Serveru z R:

# export ODBC_LIBS=/usr/local/easysoft/unixODBC/lib
# export ODBC_INCLUDE=/usr/local/easysoft/unixODBC/include
# R CMD INSTALL RODBC_1.3-12.tar.gz
$ R
> library("RODBC")
> ch <- odbcConnect("SQLSERVER_2016")
> sqlQuery(ch, paste("SELECT * from Customer"))
  ID   Name CreditCard        Phone              Email
1  1 A Name  111222333 01937 860000 someone@somedomain

  1. Zabezpečení instalace MySQL

  2. Jak porovnávat pole v PostgreSQL

  3. Databázové modelování

  4. 5 tipů, jak udržet databázi v bezpečí