Gostaria de dizer que hoje o incidente que enfrentei relacionado ao Microosft SQL Server 2012. Eu tinha feito login no Microsoft SQL Server 2012 no início do horário de trabalho do horário de expediente, mas no meio do horário de trabalho da minha empresa, recebi o ( Microsoft SQL Server, Erro: 18487) como mensagem de erro
===================================
Cannot show requested dialog.
===================================
Cannot show requested dialog. (SqlMgmt)
------------------------------
Program Location:
at Microsoft.SqlServer.Management.SqlMgmt.DefaultLaunchFormHostedControlAllocator.AllocateDialog(XmlDocument initializationXml,
IServiceProvider dialogServiceProvider, CDataContainer dc)
at
Microsoft.SqlServer.Management.SqlMgmt.DefaultLaunchFormHostedControlAllocator.Microsoft.SqlServer.Management.SqlMgmt.ILaunchFormHostedControlAll
ocator.CreateDialog(XmlDocument initializationXml, IServiceProvider dialogServiceProvider)
at Microsoft.SqlServer.Management.SqlMgmt.LaunchForm.InitializeForm(XmlDocument doc, IServiceProvider provider, ISqlControlCollection control)
at Microsoft.SqlServer.Management.SqlMgmt.LaunchForm..ctor(XmlDocument doc, IServiceProvider provider)
at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.ToolMenuItemHelper.OnCreateAndShowForm(IServiceProvider sp, XmlDocument doc)
at Microsoft.SqlServer.Management.SqlMgmt.RunningFormsTable.RunningFormsTableImpl.ThreadStarter.StartThread()
===================================
Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)
------------------------------
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&LinkId=20476
------------------------------
Program Location:
at Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.Process(Object connectionInfo, Request request)
at Microsoft.SqlServer.Management.SqlManagerUI.CreateLogin.CheckObjects(String login)
at Microsoft.SqlServer.Management.SqlManagerUI.CreateLogin..ctor(CDataContainer context)
===================================
Failed to connect to server ServerName. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
Program Location:
at Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()
at Microsoft.SqlServer.Management.Common.ConnectionManager.PoolConnect()
at Microsoft.SqlServer.Management.Common.ConnectionManager.get_DatabaseEngineType()
at Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.UpdateConnectionInfoIfCloud(Object& connectionInfo, Urn urn, Boolean& isUpdated)
at Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.Process(Object connectionInfo, Request request)
===================================
Login failed for user 'SQLLoginID'. Reason: The password of the account has expired. (.Net SqlClient Data Provider)
------------------------------
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=18487&LinkId=20476
------------------------------
Server Name: ServerName
Error Number: 18487
Severity: 14
State: 1
Line Number: 65536
------------------------------
Program Location:
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean
asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet
bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet
bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword,
Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword,
Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential
credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions,
SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance,
SqlConnectionString userConnectionOptions, SessionData reconnectSessionData)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object
poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup,
DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry,
DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory
connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory,
TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnect(WindowsIdentity impersonatedIdentity)
at Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()
Eu passei por tudo relacionado a este tópico no site stackExchange. Principalmente o Aaron Bertrand todas as postagens de blog relacionadas a este tópico como sys.sql_logins.is_policy_checked significa que a política foi verificada? e Verificar política de senha em usuários existentes e também https://dba.stackexchange.com/search?q=password+policy .
Mas suponho que fazer essa pergunta é por isso que vou perguntar ao especialista em sql.
Sou novato em comparação com o SQL Server, como o especialista em SQL Server Aaron Bertrand e outros, meu especialista sênior em StackExchange SQL. De acordo com a política do ambiente de trabalho, o administrador do sistema não compartilhou a 'política de configuração de segurança local'. Portanto, não tenho as informações exatas de expiração do 'tempo máximo de senha'. Já enfrentei tantas vezes o erro acima relacionado à alteração de senha.
Da consulta T-SQL
select * from sys.sql_logins;
Após esta consulta, conheço todos os detalhes do syslogin do SQL, como is_policy_checked , is_expiration_checked , create_date e modify_date .
De modify_date, sei a data exata da data de modificação do login do SQL. Também está claro na consulta acima para qual usuário aplicou a 'Política de senha imposta' e 'Expiração de senha imposta' junto com seu login SQL.
No meu ambiente, tenho um usuário 'sa' do Microsoft SQL Server 2012. Mas não tenho permissão para verificar as configurações de segurança local-> política de conta-> idade máxima da senha.
Qualquer dica ou pista relacionada a este erro será apreciada.
As informações solicitadas aqui não são informações do SQL Server. São informações no nível do Windows / SO. Essas informações não estão disponíveis no SQL Server (ou seja, não parece haver nenhum DMV contendo essas informações).
Também deve ser observado que as propriedades de Login
is_policy_checked
pertencemis_expiration_checked
apenas aos Logins do SQL Server, não aos Logins do Windows (uma vez que os Logins do Windows já têm aqueles aplicados de acordo com a política do sistema/domínio).A única maneira de obter as informações da política de senha é obtê-las do sistema operacional. Você pode usar uma GUI ou linha de comando da
NET ACCOUNTS
seguinte maneira:Por padrão,
NET ACCOUNTS
exibe informações do sistema local. Se o seu computador estiver conectado a um Domínio e seu login for uma conta de Domínio, você precisará adicionar o/DOMAIN
switch:Obviamente, se você não tiver permissão para ver essas informações, precisará entrar em contato com um administrador de domínio.