最近我创建了一个位于Database > System Databases > master > Tables > my_table
. (参考下图)
现在我想创建一个可以访问此表的用户,但不知道它是如何工作的。(我想用 C# 连接到这个表)
用户对象不应存储在主数据库中,如以下文章所述。
\n\n主数据库中的表(BrentOzar.com)
\n\n\n\n\nmaster 数据库是一个系统数据库 \xe2\x80\x93 它 \xe2\x80\x99s 并不是真正供您浏览和存储内容的。我们通常为主数据库而不是用户数据库设计不同的备份和恢复过程。
\n
主数据库以简单恢复模式运行,因此如果数据库损坏,则无法恢复到某个时间点。
\n\nSQL Server\xe2\x80\x9cmaster\xe2\x80\x9d数据库中的表,会引起问题吗?(服务器故障.com)
\n\n\n\n\n我建议迁移到专用数据库。以下是几个原因:
\n\n\n
\n- 如果您想要将此数据库迁移到 SQL Server 的其他实例,您无论如何都需要执行此操作。您无法迁移 master。
\n- 主数据库不适用于用户数据。它旨在成为保持实例功能所需的数据和代码的中心点。在 master 中添加东西会使那里的水变得浑浊。
\n- 将内容添加到 master 需要不必要地更改 master 中的安全性。
\n
主数据库(Microsoft TechNet)
\n\n\n\n\n使用 master 数据库时,请考虑以下建议:
\n\n\n
\n- 始终拥有可用的主数据库的当前备份。
\n- 进行以下操作后请尽快备份master数据库:\n \n
\n\n
- 创建、修改或删除任何数据库
\n- 更改服务器或数据库配置值
\n- 修改或添加登录帐户
\n- 不要在 master 中创建用户对象。否则,必须更频繁地备份 master。\n 不要将 master 数据库的 TRUSTWORTHY 选项设置为 ON。
\n
考虑为您的应用程序创建一个用户数据库(例如My_App)。
\n\nCREATE DATABASE [My_App]\n CONTAINMENT = NONE\n ON PRIMARY \n( NAME = N\'My_App\', FILENAME = N\'E:\\DATA\\My_App.mdf\' , SIZE = 131072KB , FILEGROWTH = 16384KB )\n LOG ON \n( NAME = N\'My_App_log\', FILENAME = N\'F:\\LOGS\\My_App_log.ldf\' , SIZE = 65536KB , FILEGROWTH = 16384KB )\nGO\n
Run Code Online (Sandbox Code Playgroud)\n\n然后为您的数据库创建一个管理用户(例如My_App_DBO):
\n\nUSE [master]\nGO\nCREATE LOGIN [My_App_DBO] WITH PASSWORD=N\'P@ssw0rd\', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON\nGO\nUSE [My_App]\nGO\nCREATE USER [My_App_DBO] FOR LOGIN [My_App_DBO]\nGO\nUSE [My_App]\nGO\nALTER USER [My_App_DBO] WITH DEFAULT_SCHEMA=[dbo]\nGO\nUSE [My_App]\nGO\nALTER ROLE [db_owner] ADD MEMBER [My_App_DBO]\nGO\n
Run Code Online (Sandbox Code Playgroud)\n\n该用户将在您的新数据库上拥有db_owner角色,并且可以对您的新数据库执行 DDL 和 DML 语句。
\n\n\n\n\ndb_owner 固定数据库角色的成员可以对数据库执行所有配置和维护活动。
\n
现在,您可以使用 SQL Server 登录名My_App_DBO在新的My_App数据库中创建表。
\n\n完成数据库配置后,请考虑添加一个不具有 db_owner 角色的新用户,以减少不需要的 DDL 语句的责任。
\n\n创建一个仅具有db_datareader和db_datawriter权限的新用户(例如My_App_USER)。
\n\nUSE [master]\nGO\nCREATE LOGIN [My_App_USER] WITH PASSWORD=N\'P@ssw0rd\', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON\nGO\nUSE [My_App]\nGO\nCREATE USER [My_App_USER] FOR LOGIN [My_App_USER]\nGO\nUSE [My_App]\nGO\nALTER USER [My_App_USER] WITH DEFAULT_SCHEMA=[dbo]\nGO\nUSE [My_App]\nGO\nALTER ROLE [db_datareader] ADD MEMBER [My_App_USER]\nGO\nUSE [My_App]\nGO\nALTER ROLE [db_datawriter] ADD MEMBER [My_App_USER]\nGO\n
Run Code Online (Sandbox Code Playgroud)\n\n具有 db_datawriter 角色的 SQL Server 登录名可以:
\n\n\n\n\ndb_datawriter 固定数据库角色的成员可以添加、删除或更改所有用户表中的数据。
\n
具有 db_datareader 角色的 SQL Server 登录名可以:
\n\n\n\n\ndb_datareader 固定数据库角色的成员可以对数据库中的任何表或视图运行 SELECT 语句。
\n
然后从那里开始。
\n\n这只是一个小小的起点,应该能让您大致了解如何将内容排除在主数据库之外。
\n\n并始终确保在运行脚本来创建对象时位于数据库上:
\n\nUSE My_App\n
Run Code Online (Sandbox Code Playgroud)\n\n祝你好运。
\n 归档时间: |
|
查看次数: |
10194 次 |
最近记录: |