标签: sql-server

SQL Server:向视图中的用户授予选择访问权限,而不是其表中的用户

我有一个带有几个数据库的 SQL Server 2012 实例。在其中一个中,我创建了一个视图,它选择的不仅仅是数据库中的表。

我希望用户能够选择该视图,但不能选择其表。创建视图正是因为用户无法选择表。

我已阅读/sf/ask/25789011/http://msdn.microsoft.com/en-us/library/ms188676。 aspx,但它仍然无法正常工作。

如果我GRANT SELECT TABLE TO USER对所有表执行 a ,用户就可以选择视图。但是如果我撤销到任何表,它就会失败。

这应该是一个简单的过程,但我无法让它工作。我以前见过它发生过(实例的所有者让我访问视图,但没有对它的表执行此操作)但我无法执行此操作或找到知道如何操作的人。

有人可以为我提供有关如何操作的教程或代码示例吗?


当用户SELECTs查看我收到的消息时:

对象<TABLE>、数据库<DB>、架构的 SELECT 权限被拒绝dbo

如果我授予该表的选择权,错误消息会将表名更改为视图读取的另一个表。

schema sql-server permissions

11
推荐指数
1
解决办法
5万
查看次数

如何让 SSMS 像 SSDT 一样在 sqlcmd 模式下使用 :r 使用当前脚本的相对路径?

如果我在同一个文件夹中有 foo.sql 和 bar.sql,则 foo.sql 在 sqlcmd 模式下从 SSDT 运行时可以引用 bar.sql :r ".\bar.sql"。但是,SSMS 不会找到它。Procmon 显示 SSMS 正在寻找%systemroot%\syswow64

带注释的 Procmon 屏幕截图

如何告诉 SSMS 在不显式声明路径的情况下查看当前脚本保存到的文件夹?

sql-server ssms sqlcmd ssdt

11
推荐指数
2
解决办法
5153
查看次数

错误:无法生成 SSPI 上下文

当有人尝试连接到 SQL Server 实例时,会显示错误:

不可能生成 SSPI 上下文。

昨天我们停电了(不知道这个用英语怎么说),我不得不关闭我们的服务器。

寻找答案,我发现了这个:

SQL Server 2008 连接问题:无法生成 SSPI 上下文

但这对我没有帮助,因为直到昨天它们都工作正常。我不想改变任何东西。但如果有必要,我会改变它。

Obs:我现在无法重新启动服务器。


编辑:自从我回答以来,我们没有任何错误。

sql-server-2008 authentication sql-server errors connectivity

11
推荐指数
2
解决办法
12万
查看次数

高 PAGELATCH_* 和 WRITELOG 等待。他们有关系吗?

我们看到非常高的 PAGELATCH_EX 和 PAGELATCH_SH 等待类型以及高 WRITELOG 等待。我已经诊断出导致 PAGELATCH 等待的查询,并且可以通过降低插入到使用 IDENTITY 值定义的繁忙集群主键的插入率来消除它们。我知道这种现象被称为最后一页插入闩锁争用。

但是我的问题是,当插入新记录时,SQL Server 是否在缓冲页上取独占 PAGELATCH_EX,将记录​​插入缓冲页,将记录写入事务日志,然后按详细https://释放独占 PAGELATCH_EX www.microsoft.com/en-ie/download/details.aspx?id=26665 Page 24. 还是先将记录写入事务日志,然后再将 PAGELATCH_EX 作为详细的“Resolving PAGELATCH Contention on High Concurrent”INSERT Workloads -背景信息SQLCAT 的指南:关系引擎

如果记录是在闩锁机制之外写入日志,那么我可以排除由于高 PAGELATCH 等待而导致的缓慢写入磁盘的情况。但是,如果锁存器一直保持到记录被强化记录,那么我可能应该考虑 WRITELOG。

也有多个非聚集索引会导致 PAGELATCH_* 锁存器保持更长时间,即如果一个表有一个聚集和多个非聚集索引,同时向每个索引缓冲区页添加和释放锁存器?

更新 1 阅读confio-sql-server-writelog-wait幻灯片二和一般 WAL 架构后。我现在了解到,两份白皮书中详述的“记录该行已被修改的日志条目”步骤是指 SQL Server 记录事务日志缓存中的更改,而不是磁盘。一旦事务完成或缓冲区已满,所有记录都会立即刷新到磁盘。

sql-server sql-server-2008-r2 database-internals sql-server-2012 sql-server-2014

11
推荐指数
1
解决办法
1522
查看次数

优化超过 25 万行的查询

我正在使用 MS SQL,我必须根据不同的条件在同一个表上运行多个查询。起初我在原始表上运行每个查询,尽管它们都共享一些过滤器(即日期、状态)。这花了很多时间(大约 2 分钟)。

数据行中有重复项,所有索引都是非聚集的。我只对我的标准的 4 列感兴趣,结果应该只输出所有查询的计数。

需要的列:TABLE, FIELD, AFTER, DATE, 并且每个DATE和上都有一个索引TABLE

在创建一个只有我需要的字段的临时表后,它下降到 1:40 分钟,这仍然很糟糕。

CREATE TABLE #TEMP
(
    TABLE VARCHAR(30) NULL,
    FIELD VARCHAR(30) NULL,
    AFTER VARCHAR(1000) NULL,
    DATE DATETIME,
    SORT_ID INT IDENTITY(1,1)
)
CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID)

INSERT INTO #TEMP (TABLE, FIELD, AFTER, DATE)
    SELECT TABLE, FIELD, AFTER, DATE 
    FROM mytbl WITH (NOLOCK)
    WHERE TABLE = 'OTB' AND
    FIELD = 'STATUS'
Run Code Online (Sandbox Code Playgroud)

运行此 ->(216598 行受影响)

由于并非所有查询都依赖于日期范围,因此我没有将其包含在查询中。问题是只插入. …

performance sql-server sql-server-2012 performance-tuning

11
推荐指数
2
解决办法
8万
查看次数

验证现有用户的密码策略

我最近进入了一个环境,其中许多数据库登录都没有enforce_password_policy启用该标志。
即将进行的审计需要验证这些登录的密码。

我使用以下查询来获取登录列表以及标志是打开还是关闭。

select 
    @@SERVERNAME as servername, 
    name, 
    IS_SRVROLEMEMBER('sysadmin', name) as SYSADMIN,
    type_desc,
    create_date,
    is_policy_checked,
    is_disabled,
    password_hash,
    PWDCOMPARE(name, password_hash) as UsernameAsPassword
FROM sys.sql_logins
Run Code Online (Sandbox Code Playgroud)

但是,这并不能告诉我密码是否确实符合密码策略,因为该标志仅在创建用户时相关。

是否有已知的方法来测试现有用户的密码策略合规性?
我无法访问旧密码,我更喜欢不需要它们的方法。

security sql-server sql-server-2008-r2 password

11
推荐指数
1
解决办法
2万
查看次数

具有只读应用程序意图的 SSMS 注册服务器

我们正在使用 AlwaysOn 进行 SQL Server 2014 POC 测试,其中一位用户询问是否使用本地服务器组中的注册服务器保存具有只读意图的 SSMS 配置。这样他们就不必在每次需要访问只读副本时都输入别名。

不幸的是,与常规对象浏览器不同,注册服务器中没有选项可以添加 ApplicationIntent 选项。

我从 Microsoft 看到了这篇关于更改 RegSrvr.xml 中的连接字符串的文章。

https://connect.microsoft.com/SQLServer/feedback/details/786323/ssms-sql-server-management-studio-2012-missing-connection-properties-for-availability-groups

我尝试了他们的建议,但在通过注册服务器中的本地服务器连接时,它没有连接到正确的副本节点。

使用连接窗口 > 附加连接参数中的选项时,对象资源管理器中的只读选项工作正常。但它不会保存对连接所做的更改。

有没有人知道使用 SSMS保存具有只读意图属性的配置的任何替代解决方案?在此先感谢您的帮助。

sql-server ssms availability-groups sql-server-2014

11
推荐指数
2
解决办法
8704
查看次数

在实际安装之前,从可用设置中确定 SQL Server 版本和版本?

我们正在经历从 SQL Server 2008 R2 企业版到标准版的降级过程。

为了启动上述活动,我们正在寻找可用的 SQL Server 标准版。我们找到了一个,但对以下几点感到困惑:

  1. 安装文件(由早期团队成员保存)位于一个说明它是 SQL Server 2008 R2 的文件夹中,但为了在我们开始安装之前进行交叉检查,我们查看了default.ini文件,它说:

    SQLSERVER2008 Configuration File
    [SQLSERVER2008]
    
    Run Code Online (Sandbox Code Playgroud)

    这就产生了一个疑问,这是否是所需的正确版本的 SQL Server。那么在我们实际继续尝试安装之前,如果上述方法不正确确定版本,还有其他方法吗?

  2. 我们也可以检查一下那个可用的SQL Server的版本,因为在设置上,我们很难弄清楚它是否真的是标准版?

根据我们的安全政策,我们不能简单地下载新媒体。此外,我们无权下载。

sql-server sql-server-2008-r2 installation

11
推荐指数
1
解决办法
2188
查看次数

正在进行大容量插入时 SSDT 架构比较不起作用

我在一个大型 ETL 和 DW 项目中工作,我们将 TFS/源代码控制与 SSIS 和 SSDT 一起使用。

今天,我发现当 SSIS 包正在对数据库表执行 BULK INSERT 时,不可能对该数据库执行 SSDT 模式比较。这是不幸的,因为我们的一些软件包需要很长时间才能完成。我们想使用 Schema Compare 功能来检测数据库结构的更改,以便将它们保存在我们的 SSDT 项目中,以便对数据库进行版本控制。

深入研究一下,我发现 SSDT 中的 Schema Compare 函数执行一个 SQL 脚本,该脚本调用OBJECTPROPERTY()数据库中表的系统函数。特别是在我的情况下,OBJECTPROPERTY(<object_id>, N'IsEncrypted')<object_id>引用当前正在批量插入的表时,任何调用似乎都被阻止了。

在 Visual Studio 中,SSDT 架构比较只是在一段时间后超时,并声称未检测到任何差异。

SSDT 中是否有解决此问题的方法,或者我应该尝试提交 MS Connect 错误报告?

或者,由于 BULK INSERT 发生在 SSIS 包中,是否有某种方法可以在不锁定OBJECTPROPERTY表上的调用的情况下进行此插入?编辑:在 SSIS OLE DB 目标中,我们可以从“锁定表”中删除复选标记,它按照它所说的做,但这在某些情况下可能会损害性能。我对允许 SSDT 架构比较完成其工作的解决方案更感兴趣,即使某些对象被锁定。

sql-server ssis ssdt

11
推荐指数
1
解决办法
693
查看次数

在没有 2005 或 2008 实例的情况下从 SQL Server 2000 迁移到 2012

我在 SQL Server 2000 上遇到了三个旧数据库,我需要将其迁移到 2012 年。我相信标准方法是恢复到 2005 年或 2008 年的实例,更新、重新导出并最终恢复到 2012 年。

很好,除了我们没有 2005 或 2008 实例可用。

是否有任何可能值得尝试的变通方法或其他方法?

作为参考,数据库只包含 15-20 个表和几个视图,它们看起来非常简单,备份大小只有 100-200MB。

sql-server migration sql-server-2000 restore sql-server-2012

11
推荐指数
2
解决办法
2万
查看次数