Always Encrypted is not working for Where condition - encryption

I am using SQL Server 2016 to use always encryption option. I have 2 servers. I kept SQL Server 2016 in server and encrypted columns for my DB. I have hosted my ASP.NET MVC application on the other server using IIS. I am using Entity Framework to connect with SQL Server. I have added the column encryption setting=enabled; in my connection string.
I have also imported the certificate to the server in which my application hosted in IIS.
While running the below code, I am getting an error.
var userName= context.testtable.Where(p => p.email == "melody#gmail.com").FirstOrDefault();
Error
The data types varchar and varchar(100) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'testdb') collation_name = 'Latin1_General_BIN2' are incompatible in the equal to operator.

Related

SQL Server 2019: failed to decrypt column

I have restored a database in SQL Server 2019 Dev edition. The .bak file was created from a SQL Server 2017 database on a different machine.
I get this error:
Failed to decrypt column 'EmployeeSalary'.
Failed to decrypt a column encryption key using key store provider: 'MSSQL_CERTIFICATE_STORE'. The last 10 bytes of the encrypted column encryption key are: ‘xx-xx-xx-xx-xxx-xx-xxx-xx'.
Certificate with thumbprint 'xxxxxxxxxxxx' not found in certificate store 'My' in certificate location 'LocalMachine'. Verify the certificate path in the column master key definition in the database is correct, and the certificate has been imported correctly into the certificate location/store.
Parameter name: masterKeyPath
Almost all the tables have one or more encrypted columns.
I do not see any "Always encryption..." certificate in Cert Manager.
Also I do not have any certificate.
What changes are required to make it work?

Using the Windows Credential Manager for a SQL connection in a .NET 5 console app

We need to connect to different SQL servers with different credentials in different domains and we don't want to store the passwords as plain text in a config file. That's why we would like to use the Windows Credential Manager (Windows Password Vault) for the authentication while establishing a connection to a (remote) Microsoft SQL Server in a .NET 5 console application.
Does anybody know if this is possible and if so, how to accomplish that?
Have you tried using CredentialManagement:
https://www.nuget.org/packages/CredentialManagement/1.0.2?_src=template
Then utilize it like so:
string username;
string password;
using (var credential = new Credential())
{
credential.Target = "networkaddress";
username = credential.Username;
password = credential.Password;
}

How to create a table in SQL Server with RevoScaleR?

I'd like to create a table in my SQL Server database running on a local instance and populate it with mine predicitve model written in R; to which aim I call these lines of R script:
predictionSql = RxSqlServerData(table = "Logit_FPD60_ZIP", connectionString = connStr)
predict_logit = rxPredict(logit_model, input_data, outData = predictionSql)
...which returns:
[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user
'my server'.
I can establish a connection and preview data from the server.
I've tried:
Set SQL Server and Windows Authentication mode in my SQL Server
Security properties and restart both the service and Lunchpad.
Create a generic SQL Server Connector
which is:
[ODBC] DRIVER=SQL Server Native Client 11.0 DATABASE=Predict
WSID=NB-IT-JIRAK APP=Operační systém Microsoft® Windows®
Trusted_Connection=Yes SERVER=NB-IT-JIRAK\SJ Description=Generic SQL
Connector
I'm using this connection string in R:
connStr <- paste("Driver=SQL Server; Server=", "NB-IT-JIRAK\\SJ",
";Database=", "Predict", ";Trusted_Connection=true", sep = "");
What am I missing? New to R, help would be appreciated. Thanks in advance.
Change connection string to sa if it is a test machine or a use a privileged account:
connection_string <- sprintf("Driver=SQL Server;Server=%s;Database=%s;Uid=sa;Pwd=mypass", server, db_name)
commented: --> connection_string <- sprintf("Driver=SQL Server;Server=%s;Database=%s;Trusted_Connection=Yes", server, db_name)

DB2OLEDB v5 and SQL Server 2016

I connect to an AS400 database using DB2OLEDB v5 as a linked server from SQL Server 2016--but Binary to Character will not translate. All binary fields on the AS400 database are returned as hex on the SQL Server. Has anyone had success using this type of linked server from SQL Server 2016? The provider string below is the same one I used successfully on SQL Server 2012. I really appreciate any help that can be provided. Here is my Provider string:
exec master.dbo.sp_addlinkedserver #server = N'JDE'
, #srvproduct = N'DB2OLEDB'
, #provider = N'DB2OLEDB'
, #datasrc = N'192.168.x.x'
, #provstr = N'Provider=DB2OLEDB;
User ID=########;
Password=########;
Initial Catalog=S06822B5;
Network Transport Library=TCPIP;
Host CCSID=37;
PC Code Page=1252;
Network Address=192.168.x.x;
Network Port=446;
Package Collection=QGPL;
Default Schema=CRDDTA;
Process Binary as Character=True;
Units of Work=RUW;
DBMS Platform=DB2/AS400;
Use Early Metadata=False;
Defer Prepare=False;
DateTime As Char=False;
Rowset Cache Size=0;
Datetime As Date=False;
AutoCommit=True;
Authentication=Server;
Decimal As Numeric=False;
Derive Parameters=True;
LoadBalancing=False;
Persist Security Info=False;
Cache Authentication=False;
Mode=Read;
Connection Pooling=False;'
, #catalog = N'S06822B5'
/* For security reasons the linked server remote logins password is changed with ######## */
and
exec master.dbo.sp_addlinkedsrvlogin #rmtsrvname = N'JDE'
, #useself = N'False'
, #locallogin = null
, #rmtuser = N'connect'
, #rmtpassword = '########'
Suggestion: for correct connection string and SQL server version use DB2OLEDBV6_x64.msi which part of SQL SERVER 2016 SP2 Feature Pack

What's wrong with this ASP connection string?

I'm at the end of my rope on this. It should be so simple.
I just need to know what's wrong with this connection string:
dbc.open ("Driver={SQL Server}; Data Source = ServerName; Initial Catalog = InitialDB; " "User ID = Username; Password = Password;")
I get this error when running that line:
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
I know ServerName is up and accepting connections, I know InitialDB exists, I know User ID and Password are valid for the database. What am I missing?
In notepad create file anyname.udl - let it be empty. After in explorer click it - you will get a dialog to create OLEDB connection string, select expected driver, and all connection param, ensure that "Allow saving password" = True. Press Ok.
Then again open file with notepad. Content is valid connection string
Try this...
dbc.open ("Provider=SQLOLEDB; Driver={SQL Server}; Data Source = ServerName; Initial Catalog = InitialDB; User ID = Username; Password = Password; Network Library=dbmssocn;")
As someone has already pointed out, udl is the best easiest way to create a conn string - here is a link that talks about it. https://web.archive.org/web/20210211044624/http://www.4guysfromrolla.com/webtech/070400-1.shtml
If you are using ADOdb you might want to try
"Provider=SQLNCLI10;Server=SERVER;Database=DATABASE;Uid=USERNAME;Pwd=PASSWORD"
for SQL Server 2008 Native Client or
"Provider=SQLNCLI;Server=SERVER;Database=DATABASE;Uid=USERNAME;Pwd=PASSWORD"
for SQL Server 2005 Native Client.
For ODBC, use
"Driver=SQL Server Native Client 10.0"
for SQL Server 2008 Native Client or
"Driver=SQL Native Client"
for SQL Server 2005 Native Client.
What's with the " " in the middle of the string?
Your connection string appears to be mixing ODBC and OLEDB. I would suggest visiting http://www.connectionstrings.com/ and finding the correct syntax for the desired provider.
Yours:
"Driver={SQL Server}; Data Source = ServerName; Initial Catalog = InitialDB; " "User ID = Username; Password = Password;"
ODBC:
"Driver={SQL Server};Server=ServerName;Database=InitialDB;Uid=Username;Pwd=Password;"
OLEDB:
"Provider=sqloledb;Data Source=ServerName;Initial Catalog=InitialDB;User Id=Username;Password=Password;"
Do you have visual studio?
Connect to the database server, and locate the database you want to connect to.
Right click, select properties. Your connection string to the db is right there.
Copy to wherever you want. -- Should be in web config, but you can paste it directly into code if you so desire.

Resources