sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server 2016

Community Technical Preview (CTP)-udgivelsen af ​​SQL Server 2016 har givet os mulighed for at prøve nogle af de nye funktioner, der vil være tilgængelige i den kommende version.

Dynamisk datamaskering

Denne funktion giver dig mulighed for at beskytte fortrolige data fra brugere, der ikke er autoriseret til at se dem, ved at skjule noget af eller hele en kolonnes indhold. For eksempel kan du blotlægge en del af et kreditkortnummer for at gøre det muligt for helpdesk-personalet at se de sidste fire cifre; du kan vælge helt at skjule data i en lønkolonne.

Hvis du bruger SQL Server CTP 2.0, skal du køre denne kommando for at aktivere dynamisk datamaskering:

DBCC TRACEON(209,219,-1)

Brug ikke denne kommando, hvis du bruger en nyere version af CTP, da dette vil deaktivere dynamisk datamaskering. (Hvis du bruger CTP 2.0, og du ikke gør det kør denne DBCC-kommando, eller du kører CTP2.1+, og du gør det køre denne kommando, vil du få fejlen "Forkert syntaks nær 'maskeret'", når du forsøger at definere en dynamisk maske for en kolonne.

Følgende SQL opretter en tabel, der bruger dynamisk datamaskering til at skjule indholdet af tre kolonner. Indholdet af CreditCard søjlen er delvist eksponeret. Hvad bliver afsløret i Phone kolonnen overlades til den dynamiske datamaske. Standarden for en strengkolonne er "xxxx". Standarden for en numerisk kolonne er "0". Email kolonne bruger en dynamisk datamaske, der er specifikt rettet mod indholdet af den pågældende kolonne.

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')

Brug af isql program inkluderet i vores SQL Server ODBC driver distribution, logger vi på med en SQL Server konto, der ikke er autoriseret til at se indholdet af en maskeret kolonne:

$ /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] |
+----+-------+-----------+-------+---------------+

Vi logger derefter på med en konto, der har tilstrækkelige privilegier:

$ /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] |
+----+-------+-----------+--------------+------------------------+

JSON-understøttelse

JavaScript Object Notation (JSON) er et tekstformat, der letter udvekslingen af ​​data. Efterhånden som flere applikationsudviklere anvender JSON som deres foretrukne dataformat, vokser behovet for JSON-venlige databaser. Som en konsekvens heraf har flere NoSQL-databaser valgt JSON som deres primære dataformat. En sådan database er MongoDB.

På vores testmaskiner brugte vi SQL Server 2016's JSON-understøttelse til at udveksle data mellem SQL Server og MongoDB.

Vi brugte bulk copy-programmet (bcp) inkluderet i vores SQL Server ODBC-driverdistribution til at eksportere de kundedata, vi oprettede tidligere i JSON-format. (Bcp-kommandoen opretter forbindelse til SQL Server som "sa", og dataene i de maskerede kolonner er afsløret.)

$ 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"}]

Vi importerede derefter JSON-dataene til 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" }
>

Sikkerhed på rækkeniveau

Med sin Row-Level Security-funktion er SQL Server 2016 i stand til at begrænse adgangen til rækkedata baseret på et SQL Server-login. Sikkerhed på rækkeniveau er gennemsigtig for SQL Server-brugere, de er uvidende om, at rækker, de ikke har tilladelse til at se, bliver filtreret fra deres forespørgselsresultater.

For at prøve denne funktion med vores SQL Server ODBC-driver gengav vi Microsofts sikkerhedseksempel på rækkeniveau. Vi gjorde dette i en database, der havde SQL Server-brugere ved navn "Sales1" og "Sales2", som har SELECT privilegier.

Vi oprettede og udfyldte en tabel med nogle salgsdata. SalesRep kolonnen gemmer brugernavnet på den relevante salgsrepræsentant.

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);

Sikkerhed på rækkeniveau implementeres med en funktion med tabelværdi, der enten returnerer en enkelt række, hvis brugeren har den rette adgang, eller ingen resultater. I det følgende eksempel returnerer funktionen tabelværdi en række, hvis SalesRep kolonnen er den samme som brugeren, der udfører forespørgslen.

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);

Vi brugte SQL Server ODBC-driveren til at oprette forbindelse til databasen som Sales2-bruger. Sikkerhed på rækkeniveau sikrer, at denne bruger kun kan se salg foretaget af brugeren 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   |
+------------+----------+-----------+-------+
|            |          |           |       |
+------------+----------+-----------+-------+

In-database R

Med Microsofts køb af Revolution Analytics, en udbyder af software og tjenester til programmeringssproget R, er de i stand til at integrere R med SQL Server. SQL Server 2016 vil være den første version af databasen, der inkorporerer R, hvilket gør det muligt at køre R-kode inde i SQL Server-databasemotoren.

Hvis du har en tidligere version af SQL Server, er alternativet at udtrække data fra SQL Server til R ved at bruge ODBC. RODBC-pakken gav en ODBC-grænseflade til R. Vi byggede RODBC mod unixODBC Driver Manager inkluderet i vores SQL Server-driverdistribution og hentede derefter nogle SQL Server-data fra 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. ORA-01034:ORACLE ikke tilgængelig ORA-27101:delt hukommelsesrige eksisterer ikke

  2. AFTER LOGON(Oracle) trigger i PostgreSQL med udvidelse – login_hook

  3. Hvordan gemmer man uuid som nummer?

  4. PostgreSQL 9.3:Dynamisk pivottabel