标签: sql-server-2008

如何添加有权访问单个视图的用户?

我正在使用 MSSQL Server Management Studio 2008,我需要向第三方公开一个视图以进行数据协调。我已经创建了适当的视图,但是我在创建用户并授予该用户从视图中进行选择的适当权限时遇到了问题。

我按照向导创建了一个登录名和一个用户,然后在 Securables 部分添加了我的视图,并选中了选中的授权框。一切似乎都很好,但是当我以该用户身份登录并尝试执行“从 MyViewName 中选择 *”时,它告诉我选择权限被拒绝。

我刚刚重新创建了用户(这次只是使用 SQL 而不是向导)并明确授予了选择权限,现在它给了我错误:(Msg 916, Level 14, State 1, Line 2 The server principal "username" is not able to access the database "unrelated_db" under the current security context.我不知道为什么它试图访问不相关的数据库......)

我真的不知道从这里去哪里。同样,基本上我所需要的只是创建一个用户,我可以将其提供给第三方,让他们连接到我们的数据库并从此视图中进行选择。

sql-server-2008 sql-server view remote

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

根据时间间隔对记录进行分组

我有一个具有以下架构的表,我需要定义一个查询,该查询可以根据时间间隔(例如每分钟记录)对数据进行分组,然后提供自上一组以来对 SnapShotValue 的更改总和。目前,SnapShotValue 总是递增,所以我只需要差异的总和。任何人都可以帮助使用可能执行此操作的 SQL Server T-SQL 查询吗?我愿意更改架构,但这是我目前拥有的。

架构

CaptureTime   (datetime)
SnapShotValue (int)
Run Code Online (Sandbox Code Playgroud)

样本数据

1 Jan 2012 00:00:00,   100
1 Jan 2012 00:00:30,   125
1 Jan 2012 00:01:00,   200
1 Jan 2012 00:01:30,   300
1 Jan 2012 00:02:15,   400
1 Jan 2012 00:02:30,   425
1 Jan 2012 00:02:59,   500
Run Code Online (Sandbox Code Playgroud)

所需查询结果

1 Jan 2012 00:01:00,   225 -- Sum of all captured data changes up to the 1 minute mark
1 Jan 2012 00:02:00,   500 -- Sum of all captured …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 query t-sql

14
推荐指数
1
解决办法
3万
查看次数

并行统计更新

在 SQL Server 2008 或更高版本中,是UPDATE STATISTICS WITH FULLSCAN单线程操作还是可以使用并行性?如何使用默认采样更新统计信息 - 它可以使用并行性吗?我没有看到指定MAXDOP更新统计信息的选项。

sql-server-2008 sql-server parallelism statistics

14
推荐指数
1
解决办法
5327
查看次数

为什么“查找”在 SQL Server 中被着色为函数保留字?

在 SSMS 2208 中,标识符“Lookup”被涂成粉红色,就好像它是一个函数一样(与“Power”或“Convert”颜色相同)。为什么?

我在保留字官方列表中找不到它。在网络上搜索似乎毫无用处,因为那里有很多与我的问题无关的“查找”术语。

sql-server-2008 ssms reserved-word

14
推荐指数
1
解决办法
1771
查看次数

列出现有的 SQL Server 登录名和用户

我知道我们可以使用 SQL Server 中的 GUI 检查登录名和定义的用户,但我想知道如何使用脚本进行此检查。

我运行了下面的查询,但它显示了 Principal_id,我不确定如何映射以获得权限级别。

SELECT * FROM Sys.login_token 
Run Code Online (Sandbox Code Playgroud)

那么是否有任何内置的存储过程可以列出登录名和具有权限级别的用户?

谢谢你。

sql-server-2008 security sql-server

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

表中列的顺序

从我目前所见,当我们定义一个表时,通常我们将主键作为第一列。如果存在所有表中通用的杂项列,则它们位于表定义的底部。例如:Id(pk)第一列和 IsActive 和底部的时间戳。

我想知道除了跨数据库的一致性之外,这种做法是否还有更多好处。列的顺序是否会影响性能?如何?我需要在团队中证明我的观点,即在表中随机放置主键和公共键(例如 IsActive(布尔列显示记录是否处于活动状态))不是一个好习惯!

开发人员在 Visual Studio 2010 中的实体模型中创建实体,如果他们向现有实体添加新属性,显然 VS 没有将它们按正确顺序排列。这是他们忽略表中列顺序的借口。它会影响性能吗?

我很欣赏你的想法。

performance sql-server-2008

14
推荐指数
2
解决办法
1264
查看次数

拒绝访问 SQL Server 中的信息架构

我正在寻找禁用SQL Server 中用户/组访问sys.tables/的最佳方法Information Schema

从 2008 年发现了这个线程

它显示了一种如何拒绝访问的方法,[sys].[something]如下所示:

 DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
 GO
 DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
 GO
 DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
 GO
 DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
 GO
Run Code Online (Sandbox Code Playgroud)

但是没有办法如何禁用对以下内容的访问Information Schema

DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用。

如何禁用对 information_schema 的访问?

是否有更简单的方法禁用对所有sys/ 的访问information_schema

更新: 实际上我不能同时运行以下语句:

DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server-2008 sql-server sql-server-2008-r2 information-schema

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

ODBC 数据源 SQL Server 连接 - 用户登录失败

我已将我的数据库从 SQL 2005 移动到使用 SQL 2008 的服务器。

我现在正在尝试创建一个 ODBC 数据源。

我正在使用“使用用户输入的登录 ID 和密码进行 SQL Server 身份验证”并输入了我的登录名和密码。登录在 SQL Server Management Studio 中的安全-> 登录下可见。

登录名还包含我旧服务器中相同登录名的确切属性。当我输入用户名和密码后点击下一步时,我得到:

Connection failed:
SQLState: '28000'
SQL Server Error: 18456
[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'myUser'.
Run Code Online (Sandbox Code Playgroud)

阅读本文后:http : //support.microsoft.com/kb/555332我意识到服务器属性仅设置为“Windows 身份验证模式”,但即使更改为“SQL Server 和 Windows 身份验证模式”我仍然有连接问题。我可以连接我的 Windows 帐户。

sql-server-2005 sql-server-2008 odbc logins

14
推荐指数
1
解决办法
18万
查看次数

如何在单用户模式下删除数据库

如何删除显示DatabaseName (Single User)为其名称的数据库?

当我尝试删除它时,出现以下错误:

更改数据库“DatabaseName”失败。(Microsoft.SqlServer.Smo)

ALTER DATABASE 语句失败。(Microsoft SQL Server,错误:5064)

我尝试执行ALTER以下操作,但仍然存在相同的问题。

ALTER DATABASE [DatabaseName] SET MULTI_USER WITH NO_WAIT
Run Code Online (Sandbox Code Playgroud)

sql-server-2008

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

有什么时候我们应该避免级联删除?

在 SQL Server 2008 中,有一个主表,它通过一对多关系链接到其他三个子表。所以,我们想在主表中使用级联删除,这样当从主表中删除记录时,子表上的所有记录都会被删除。

  1. 那么,这里的级联删除是一个正确的选择吗?
  2. 什么时候不应该使用级联detele?

sql-server-2008 sql-server delete sql-server-2008-r2

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